Isso é o que códigos de saída são para. Então, para o seu script de monitor, poderíamos fazer algo como:
#!/bin/bash
# monitor.sh -- checks if a Thing is doing its Thing
if [[ -r /var/run/myjob.pid ]]; then
if kill -0 $( cat /var/run/myjob.pid ); then
exit 0 # The process is alive, job is presumably running
else
exit 1 # Well, we had a PID file, but it was orphaned.
fi
else
exit 2 # no PID file, job presumably not running
fi
Usamos um código de saída diferente para cada estado que desejamos manipular. Então, para nosso verificador de serviço:
#!/bin/bash
# check.sh -- Checks to see if Thing is Thinging and, if not, start it
if ! /path/to/monitor.sh; then
/path/to/start.sh
fi
E agora, o script que executa o trabalho:
#!/bin/bash
# start.sh - do a Thing
if [[ -r /var/run/myjob.pid ]]; then
echo "A Thing is already being done!" 1>&2
exit 1
else
echo $$ > /var/run/myjob.pid
trap 'rm /var/run/myjob.pid' EXIT
do_Thing_related_things
fi