Frage Wie starte / stoppe / starte neustarten Dienste von der Kommandozeile aus?


Wie starte ich zum Beispiel mein httpd oder afpd, laufe irgendein Mac OS X> = 10.5 (Leopard-), ohne die GUI zu benutzen und gehe zu Systemeinstellungen -> Freigabe und "Web Sharing" deaktivieren / prüfen?

Ich suche nach dem kanonischen Gegenstück zu Debian invoke-rc.d apache2 restart.

EDIT: Die Frage ist etwa launchd kontrollierte Dienstleistungen im Allgemeinen, nicht speziell Apache (was nur ein Beispiel war).


128
2017-10-26 12:21


Ursprung


Aus den bisherigen Antworten geht hervor, dass es keinen einzigen launchctl-Befehl gibt Neustart Ein Dienst? - JS.


Antworten:


Hi launchctl (8) ist dein Freund. Denken Sie daran, dass einige der Dienste (z. B. sshd) in der Konfigurationsdatei deaktiviert sind, so dass Sie die verwenden müssen -w wechseln, wenn sie geladen werden. Hier ist ein sshd Beispiel:

$ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist 

Sie können den Dienst mit der Funktion beenden unload Unterbefehl.

$ sudo launchctl unload  /System/Library/LaunchDaemons/ssh.plist 

Um die Dienste aufzulisten, verwenden Sie den Unterbefehl 'list';

habe Spaß, n


143
2017-10-26 14:00



In Ergänzung, launchctl list beklagt sich nicht, zeigt aber nicht alles, sudo launchctl list wird dafür benötigt. - conny
Es ist nicht so, dass es nicht alles zeigt, es zeigt eine komplett andere Liste. Wenn du rennst launchctl als normaler Benutzer zeigt / verwaltet er LaunchAgents, die in Ihrer Benutzersitzung ausgeführt werden; Als root ausgeführt, zeigt / verwaltet es die systemweiten LaunchDaemons. - Gordon Davisson
Ich kann "com.openssh.sshd" in dieser Liste sehen, also denke ich, dass die Konfiguration "geladen" ist. Nun, wie kommt es zum Beispiel sudo launchctl start com.openssh.sshd geht nicht etwas, nicht evan scheitern mit einer Fehlermeldung, noch weniger so etwas tatsächlich starten? - conny
@conny Es kann im allgemeinen Fall verwirrend sein, aber wenn du einen Dienst schreibst und zum Beispiel vermutest, dass beim Start etwas Unangenehmes passiert, kannst du es einmal laden und 'stop' / 'start' verwenden, um das Problem zu debuggen . - nayden
Warum nicht erwähnt launchctl start <label> oder launchctl stop <label>? Wenn es bereits von launchctl gestartet wurde, muss die plist-Datei nicht erneut geladen werden (es sei denn, sie wurde ebenfalls geändert). Es ist nervig, es gibt keine restart oder reload Befehl. Jeder weiß von einem Single-Befehl Weg, um zum Beispiel mongod eine Konfigurationsdatei Änderung zu machen? Ich bin einfach nicht zufrieden mit ... stop ... && ... start .... - Brian


sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist


7
2017-10-26 14:20





Du suchst nach launchctl.

SYNOPSIS
 launchctl [subcommand [arguments ...]]

DESCRIPTION
 launchctl interfaces with launchd to load, unload daemons/agents and gen-
 erally control launchd.  launchctl supports taking subcommands on the
 command line, interactively or even redirected from standard input.
 These commands can be stored in $HOME/.launchd.conf or /etc/launchd.conf
 to be read at the time launchd starts.

2
2017-10-26 13:27



Aber das Lesen der Manpage sagt mir nicht, was das Äquivalent von beiden ist invoke-rc.d my-little-daemon restart ist ... Es bezieht sich auf "job_label", sagt mir aber nicht, wie ich die verfügbaren "job_label" auflisten soll. - conny
Ich denke, die Reaktion von Nayden hat das gedeckt. - eric.s


Du könntest einfach tun

sudo launchctl stop com.openssh.sshd

Wenn Sie den vollständigen Dienstnamen nicht kennen, können Sie dies tun

sudo launchctl list

Wenn Sie den erwarteten Dienst immer noch nicht finden, versuchen Sie, ohne die Stammidentität auszuführen:

launchctl list

Und Sie müssen den Dienst nicht entladen und laden.


2
2017-12-26 13:05



Ich habe das versucht und jetzt kann ich nicht verwenden ssh von meinem Mac. Neustart wird nicht behoben. Ersetzen stop mit start repariert auch nicht. - P i
Ich habe das versucht und ich kann immer noch auf meinen Mac ssh! - Michael
@ dmitriy-apollonin Es funktioniert nicht, Sie müssen verwenden sudo unload /System/Library/LaunchDaemons/ssh.plist stattdessen. - SebMa


sudo apachectl restart

Funktioniert mit anderen OSSes und ist Teil von Apache.


1
2017-10-26 12:27



Obwohl das Thema Apache nicht besonders erwähnt, hätte ich diese Interpretation erwartet .... Es tut mir leid, aber das war nicht das, was ich gesucht habe :) - conny
Ok, ich habe den httpd Teil eingefangen, für den Apachectl ist die einfachere Variante :) - Sven♦


Nur für den Fall, wenn Sie suchen launchctl reload, Sie können Shell-Funktion in Ihrem definieren ~/.bashrc/.zshrc wie ich es tat:

function lctl {
    COMMAND=$1
    PLIST_FILE=$2
    if [ "$COMMAND" = "reload" ] && [ -n "$PLIST_FILE" ]
      then
        echo "reloading ${PLIST_FILE}.."
        launchctl unload ${PLIST_FILE}
        launchctl load ${PLIST_FILE}
      else
        echo "either command not specified or plist file is not defined"
    fi
}

Die Befehlsausführung sieht wie folgt aus -> lctl reload <your-plist-name>.plist


1
2017-10-12 09:21





Es gibt eine kleine & nützliche App namens Lingon. Lingon Freeware Edition ist hier  Manchmal kann es schwierig sein, einen Dienst neu zu starten.

syslog -w

Lesen hilft aber.


0
2018-03-08 13:34