Pregunta ¿Cómo iniciar / detener / reiniciar los servicios de launchd desde la línea de comandos?


Cómo reinicio, digamos por ejemplo mi httpd o afpd, ejecutando cualquier Mac OS X> = 10.5 (Leopard-), sin tener que usar la GUI y vaya a Preferencias del sistema -> Compartir y desactivando / marcando "Web Sharing"?

Estoy buscando el equivalente canónico de Debian invoke-rc.d apache2 restart.

EDIT: La pregunta es sobre Servicios controlados de launchd en general., no específicamente Apache (-que fue simplemente un ejemplo).


128
2017-10-26 12:21


origen


De las respuestas hasta ahora, es correcto suponer que no hay un solo comando launchctl para reiniciar ¿un servicio? - JS.


Respuestas:


Hola launchctl (8) es tu amigo. Solo tenga en cuenta que algunos de los servicios (por ejemplo, sshd) están deshabilitados en el archivo de configuración, por lo que deberá usar el -w cambiar al cargarlos. Aquí hay un ejemplo de sshd:

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

Puede detener el servicio utilizando el unload subcomando

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

Para enumerar los servicios, como ya habrá adivinado, use el subcomando 'list';)

que te diviertas, norte


143
2017-10-26 14:00



Adicionalmente, launchctl list no se queja pero no muestra todo, sudo launchctl list Se necesita para eso. - conny
No es que no muestre todo, muestra una lista completamente diferente. Cuando corres launchctl como usuario normal, muestra / administra los Agentes de inicio que se ejecutan en su sesión de usuario; ejecutado como root, muestra / administra los LaunchDaemons de todo el sistema. - Gordon Davisson
Puedo ver "com.openssh.sshd" en esa lista, así que supongo que esa configuración está "cargada". Ahora, ¿por qué? sudo launchctl start com.openssh.sshd no hace cualquier cosa, no evan fallar con un mensaje de error, mucho menos lanzar realmente algo? - conny
@conny Puede ser confuso en el caso general, sin embargo, cuando escribe un servicio y sospecha, por ejemplo, que algo malo está sucediendo en el inicio, puede cargarlo una vez y usar 'detener' / 'iniciar' para solucionar el problema. . - nayden
¿Por qué no se menciona launchctl start <label> o launchctl stop <label>? Si ya lo ha iniciado launchctl, no es necesario volver a cargar el archivo plist (a menos que también haya cambiado). Es molesto no hay restart o reload mando. ¿Alguien sabe de una forma de comando único para hacer (por ejemplo) que mongod recoja un cambio en el archivo de configuración? Simplemente no estoy satisfecho con ... stop ... && ... start .... - Brian


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


7
2017-10-26 14:20





Estás buscando 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



Pero leer la página del manual no me dice cuál es el equivalente de ninguno de los dos. invoke-rc.d my-little-daemon restart es ... Se refiere a "job_label" pero no me dice cómo listar las "job_label" disponibles. - conny
Creo que la respuesta de nayden tiene esto cubierto. - eric.s


Usted podría simplemente hacer

sudo launchctl stop com.openssh.sshd

Si no conoce el nombre completo del servicio, puede hacerlo

sudo launchctl list

Si aún no encuentra el servicio que esperaba, intente ejecutar sin la identidad raíz:

launchctl list

Y no es necesario descargar y cargar el servicio.


2
2017-12-26 13:05



Probé esto y ahora no puedo usar ssh de mi Mac. El reinicio no se arregla. Reemplazo stop con start Tampoco lo arregla. - P i
¡Intenté esto y todavía puedo ssh a mi Mac! - Michael
@ dmitriy-apollonin No funciona, debes usar sudo unload /System/Library/LaunchDaemons/ssh.plist en lugar. - SebMa


sudo apachectl restart

Funciona con otros sistemas operativos y es parte de Apache.


1
2017-10-26 12:27



Aunque el tema no menciona a apache en particular, debería haber anticipado esta interpretación ... Lo siento, pero eso no era lo que estaba buscando :) - conny
Ok, atrapé la parte httpd, para la cual usar apachectl es la variante más fácil :) - Sven♦


Por si acaso si estas buscando launchctl reload, puedes definir la función shell en tu ~/.bashrc/.zshrc como yo hice:

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
}

La ejecución del comando se ve como -> lctl reload <your-plist-name>.plist


1
2017-10-12 09:21





Hay una aplicación pequeña y útil para este llamado Lingon. La edición freeware de Lingon está aquí.  a veces reiniciar un servicio puede ser complicado.

syslog -w

la lectura ayuda sin embargo


0
2018-03-08 13:34





No sé, esto es lo que estás buscando, pero podrías intentarlo. top Un comando simple que encuentro bastante útil.


0
2018-04-18 19:11



pero esto solo muestra los procesos en ejecución y no creo que pueda iniciar / detener / reiniciar cualquier - user411190
Te dejaría detener procesos, pero comenzando no tanto. - chicks