24 votos

¿Cómo ver el estado del servicio (por ejemplo, si se está ejecutando) en un formato similar a `systemctl` de Linux utilizando `launchctl` de MacOS?

Cómo ver el estado del servicio (por ejemplo, si se está ejecutando) en un formato similar al de Linux systemctl utilizando MacOS launchctl ?

Quiero ver el estado de un servicio en MacOS usando launchctl en un formato similar al de Linux systemctl Por ejemplo systemctl status sshd.service

Intento esto usando lo siguiente launchctl list comandos. No es obvio si Apache se está ejecutando, y he leído que - en la primera columna de este último comando debería significar que el servicio no se está ejecutando.

¿Alguna idea?

Nicolass-MacBook-Pro:Documents nlykkei$ sudo launchctl list org.apache.httpd
{
        "LimitLoadToSessionType" = "System";
        "Label" = "org.apache.httpd";
        "TimeOut" = 30;
        "OnDemand" = false;
        "LastExitStatus" = 0;
        "Program" = "/usr/sbin/httpd-wrapper";
        "ProgramArguments" = (
                "/usr/sbin/httpd-wrapper";
                "-D";
                "FOREGROUND";
        );
};
Nicolass-MacBook-Pro:Documents nlykkei$ sudo launchctl list | grep apache
-       0       org.apache.httpd

5voto

Jose Chavez Puntos 645

Puede hacerlo ejecutando el comando

launchctl list

En la primera columna de la salida, encontrarás el PID. Si es un número, el servicio se está ejecutando; si aparece como "-", no se está ejecutando.

Del mismo modo, puede comprobar un solo demonio de esta manera:

launchctl list <daemon>

se obtendrá una salida con diversa información - una de las líneas con este aspecto:

"PID" = 310;

esto significa que el programa se está ejecutando, y el ID del proceso es 310. Si no hay una línea "PID", entonces el demonio no se está ejecutando.

No hay ninguna opción para obtener una salida idéntica a la que conoces de systemctl para systemd. No estoy seguro de por qué querrías una salida idéntica, o por qué crees que habría una. No era posible para Apple proporcionar una salida compatible cuando lanzaron launchctl, ya que launchd es anterior a systemd en 5 años. Así que en términos de "compatibilidad", realmente debería ser al revés - aunque no veo el punto de tener salidas compatibles allí.

Si realmente quiere una salida similar, es relativamente sencillo crear un pequeño scripts que tome la salida de launchctl y la emita en un formato similar a la salida de systemctl. Sin embargo, no puede ser exactamente igual, ya que las dos utilidades tienen diferentes opciones y diferente información disponible.

Por ejemplo, la salida de systemctl suele contener cosas como la salida del registro (integrado en systemd, no integrado en launchd), información de CGroup (característica sólo de Linux) y punteros a la documentación.

Del mismo modo, la salida de launchctl contiene cosas como MachServices, que sólo está disponible para MacOS.

Tenga en cuenta que es posible configurar launchd para que inicie un demonio "bajo demanda". Esto significa que usted especifica, por ejemplo, que su software de servidor web se ejecuta en el puerto TCP 80 - y entonces launchd monitorea ese puerto e inicia su demonio sólo cuando hay solicitudes entrantes. Si usas launchctl no encontrarás un PID para el demonio inicialmente, pero si empiezas a enviarle peticiones - se iniciará y tendrá un PID. Cuando las peticiones se detienen, el demonio se detendrá de nuevo después de un corto tiempo.

0 votos

Gracias, jksoegaard. Lo que me confunde es que sé que Apache se está ejecutando. Lo inicié usando apachectl y puedo acceder a él en 127.0.0.1. Por eso no entiendo que en la salida de lauchctl falte la información "Active:" (en ejecución) de systemctl. ¿Tienes alguna idea de por qué lauchctl no informa de un PID válido para Apache (httpd)?

0 votos

@Shuzheng Apache probablemente está siendo lanzado por algo que no sea launchd (o posiblemente por un elemento demonio de lanzamiento diferente).

0 votos

@GordonDavisson - apachectl start es equivalente a /bin/launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist inspeccionando /usr/bin/apachectl . ¿No es el lanzamiento a través de launchd ? Si no es así, ¿cómo podría lanzarlo a través de launchd ? Gracias.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X