¿Cómo se determina si un trabajo inicial se está ejecutando dentro de un script Bash? Es decir, necesito un valor "booleano" para hacer algo como:
#!/bin/bash
if [ determine_if_job_x_is_running ]; then
echo "I see upstart job X is running, please stop it before ..."
fi
status $1 2> /dev/null | grep -q "^$1 start" > /dev/null 2> /dev/null
solo para asegurarse de que sea silencioso.Normalmente usa un archivo PID, pero también puede usar pgrep para verificar sus procesos. Suponga que su servicio se llama,
jobX
esto funcionará:O mejor
fuente
Basado en String contiene en bash :
Mi primer impulso fue usar la variación de código que se proporcionaba ImaginaryRobots
que devolvería algo como
y use la solución anterior para verificar si la cadena devuelta contiene "en ejecución". Sin embargo, en caso de que el trabajo no se esté ejecutando, la llamada dbus saldrá con el estado 1 en su lugar, devolverá "esperando" como esperaba.
status ${job}
nunca saldría con el estado 1, excepto en el caso de que no haya tal trabajo.fuente
Usaría DBUS para consultar el estado de ese servicio en particular.
http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus
Tenga en cuenta que si está escribiendo su propio trabajo de inicio, debe usar eventos de inicio o dependencias de paquetes.
fuente
Parece que el comando de estado upstart se ajusta a la especificación del script de inicio del proyecto Linux Standard Base, lo que significa que puede asumir que un código de salida de 0 significa que el programa se está ejecutando, un código de salida de 1-3 significa que se está ejecutando y cualquier otro código de salida significa un estado indefinido.
Ver: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
fuente