GNU/Linux >> Tutoriales Linux >  >> Linux

¿La forma "adecuada" de probar si un servicio se está ejecutando en un script?

Mi problema:

Estoy escribiendo un script bash y en él me gustaría verificar si un servicio determinado se está ejecutando.

Sé cómo hacer esto manualmente, con $ service [service_name] status .

Pero (especialmente desde el cambio a systemd) eso imprime un montón de texto que es un poco complicado de analizar. Asumí que hay un comando creado para scripts con salida simple o un valor de retorno que puedo verificar.

Pero buscar en Google solo produce una tonelada de "Oh, solo ps aux | grep -v grep | grep [service_name] " resultados. Esa no puede ser la mejor práctica, ¿verdad? ¿Qué sucede si se está ejecutando otra instancia de ese comando, pero no una iniciada por el script de inicio de SysV?

¿O debería callarme y ensuciarme las manos con un poco de pgrep?

Respuesta aceptada:

systemctl tiene un is-active subcomando para esto:

systemctl is-active --quiet service

saldrá con estado cero si service está activo, distinto de cero de lo contrario, lo que lo hace ideal para scripts:

systemctl is-active --quiet service && echo Service is running

Si omite --quiet también enviará el estado actual a su salida estándar.

Como lo señaló don_crissti, algunas unidades pueden estar activas aunque no se esté ejecutando nada para brindar el servicio:las unidades marcadas como "RemainAfterExit" se consideran activas si salen con éxito, la idea es que brindan un servicio que no necesita un demonio (por ejemplo, configuran algún aspecto del sistema). Sin embargo, las unidades que involucren demonios solo estarán activas si el demonio aún se está ejecutando.


Linux
  1. ¿Hay alguna manera de encontrar el tiempo de ejecución del último comando ejecutado en el shell?

  2. Ejecutar script de shell en paralelo

  3. ¿Cuál es la forma correcta de iniciar un servicio mongod en linux/OS X?

  4. Cualquier forma de salir del script bash, pero sin salir de la terminal

  5. ¿Cuál es la mejor manera de verificar si un volumen está montado en un script Bash?

Ruby script como servicio

El servicio MongoDB no se ejecuta en Fedora

Ejecutar script bash como demonio

Script de Linux para verificar si el proceso se está ejecutando y actuar sobre el resultado

Cómo recuperar mediante programación el GID de un proceso en ejecución

¿Cuál es la forma más rápida de ejecutar un script?