Come avviare / arrestare / riavviare i servizi di avvio dalla riga di comando?


149

Come posso riavviare, ad esempio il mio httpd o afpd, eseguendo qualsiasi Mac OS X> = 10.5 (Leopard-), senza dover utilizzare la GUI e andare su Preferenze di Sistema -> Condivisione e deselezionando / selezionando "Condivisione Web"?

Sto cercando l'equivalente canonico di Debian invoke-rc.d apache2 restart.

EDIT: La domanda riguarda i servizi controllati dal lancio in generale , non specificamente Apache (che era semplicemente un esempio).


1
Dalle risposte finora, è corretto supporre che non ci sia un singolo comando launchctl per riavviare un servizio?
JS.

@JS. Secondo la pagina del manuale, kickstartinsieme -kall'opzione sembra fare il trucco. Vedi la mia risposta qui sotto ...
jochen

Risposte:


158

Ciao launchctl (8) è tuo amico. Tieni presente che alcuni dei servizi (ad esempio sshd) sono disabilitati nel file di configurazione, quindi dovrai utilizzare l' -wopzione quando li carichi. Ecco un esempio di sshd:

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

È possibile interrompere il servizio utilizzando il unloadsottocomando.

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

Per elencare i servizi, come avrai già intuito, usa il sottocomando 'list';)

Divertiti


9
Inoltre, launchctl listnon si lamenta ma non mostra tutto, sudo launchctl listè necessario per questo.
Conny,

9
Non è che non mostri tutto, mostri un elenco completamente diverso. Quando si esegue launchctlcome utente normale, mostra / gestisce LaunchAgent in esecuzione nella sessione utente; eseguito come root, mostra / gestisce i LaunchDaemons a livello di sistema.
Gordon Davisson,

1
Riesco a vedere "com.openssh.sshd" in quell'elenco, quindi immagino che la configurazione sia "caricata". Ora, come sudo launchctl start com.openssh.sshdmai ad esempio non fa nulla , non può fallire con un messaggio di errore, tanto meno lanciare effettivamente qualcosa?
Conny,

2
@conny Potrebbe essere fonte di confusione nel caso generale, tuttavia quando si scrive un servizio e si sospetta, ad esempio, che accada qualcosa di brutto all'avvio, è possibile caricarlo una volta e utilizzare 'stop' / 'start' per eseguire il debug del problema .
nayden,

6
Perché nessuna menzione di launchctl start <label>o launchctl stop <label>? Se è già avviato da launchctl non è necessario ricaricare il file plist (a meno che non sia cambiato anche?). È fastidioso che non ci sia restarto reloadcomando. Qualcuno sa di un modo a comando singolo di fare (ad esempio) mongod raccogliere una modifica del file di configurazione? Non sono soddisfatto ... stop ... && ... start ....
Brian,

7

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


5

Per riavviare un servizio, è possibile utilizzare il launchctl kickstartcomando, insieme -kall'opzione. Ad esempio, per riavviare apache, è possibile utilizzare

sudo launchctl kickstart -k system/org.apache.httpd

Questa informazione è dalla launchctlpagina del manuale:

 kickstart [-kp] service-target
          Instructs launchd to run the specified service immediately, regardless of its
          configured launch conditions.

          -k       If the service is already running, kill the running instance before
                   restarting the service.
          [...]

1
Quando ho provato questo il mio servizio si era bloccato, dopo una breve attesa non si è fermato, "uccidere" sul pid non ha aiutato, facendo "uccidere -9" sul pid ha ucciso il processo e lasciato kickstart (che era stato eseguito in un altro console mentre provavo a terminare il processo) continua e riavvia il servizio. Non ho aspettato molto prima di iniziare a uccidere le cose manualmente, quindi aspettare abbastanza sarebbe potuto bastare per risolvere il problema.
Samuel Åslund,

3

Potresti semplicemente farlo

sudo launchctl stop com.openssh.sshd

Se non conosci il nome completo del servizio, puoi farlo

sudo launchctl list

Se ancora non trovi il servizio che ti aspettavi, prova a eseguire senza l'identità root:

launchctl list

E non è necessario scaricare e caricare il servizio.


1
Ho provato questo e ora non posso usare sshdal mio Mac. Il riavvio non si risolve. Anche la sostituzione stopcon startnon risolve.
P

1
Ho provato questo e posso ancora ssh sul mio Mac!
Michael,

@ dmitriy-apollonin Non funziona, è necessario utilizzare sudo unload /System/Library/LaunchDaemons/ssh.plistinvece.
SebMa,

La domanda riguarda il riavvio di un servizio, ma non credo che launchctl stopriavvii un servizio.
jochen

2

Stai cercando 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
Ma leggere la man-page non mi dice quale sia l'equivalente di nessuno dei due invoke-rc.d my-little-daemon restart... Si riferisce a "job_label" ma non mi dice come elencare i "job_label" disponibili.
Conny,

Penso che la risposta di Nayden sia stata coperta.
eric.s,

2

Nel caso in cui tu stia cercando launchctl reload, puoi definire la funzione shell nel tuo ~/.bashrc/.zshrccome ho fatto:

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
}

L'esecuzione del comando è simile a -> lctl reload <your-plist-name>.plist


1
sudo apachectl restart

Funziona con altri sistemi operativi e fa parte di Apache.


1
Anche se l'argomento non menziona in particolare Apache, avrei dovuto anticipare questa interpretazione .... Mi dispiace, ma non era quello che stavo cercando :)
Conny,

Ok, ho catturato la parte httpd, per la quale l'uso di apachectl è la variante più semplice :)
Sven

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.