Comment déterminez-vous si un travail parvenu est en cours d'exécution à l'intérieur d'un script Bash? C'est-à-dire que j'ai besoin d'une valeur "booléenne" pour faire quelque chose comme:
#!/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
pour vous assurer qu'il est silencieux.Normalement, vous utilisez un fichier PID mais vous pouvez également utiliser pgrep pour vérifier vos processus. Supposons que votre service s'appelle,
jobX
cela fonctionnera:Ou encore mieux
la source
Basé sur String contient dans bash :
Ma première impulsion a été d'utiliser la variation de code ImaginaryRobots fourni
qui retournerait quelque chose comme
et utilisez la solution ci-dessus pour vérifier si la chaîne renvoyée contient "running". Cependant, si ce travail n'est pas en cours d'exécution, l'appel dbus se terminera avec le statut 1 au lieu de retourner "en attente" comme je l'attendais.
status ${job}
ne quitterait jamais avec le statut 1, sauf dans le cas où il n'y a pas un tel travail.la source
Vous utiliseriez DBUS pour interroger le statut de ce service particulier.
http://upstart.ubuntu.com/cookbook/#get-status-of-job-via-d-bus
Notez que si vous écrivez votre propre tâche upstart, vous devez utiliser des événements upstart ou des dépendances de package à la place.
la source
Il semble que la commande upstart status soit conforme à la spécification de script init du projet Linux Standard Base, ce qui signifie que vous pouvez supposer qu'un code de sortie de 0 signifie que le programme est en cours d'exécution, un code de sortie de 1-3 signifie qu'il est en cours d'exécution, et tout autre code de sortie signifie un statut indéfini.
Voir: http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html
la source