Nos sistemas Debian existe start-stop-daemon
. Eu recomendo usar isso, e se você não está no Debian ou no Ubuntu, apenas copie esse script do Debian e tente.
Existe uma ferramenta de shell que executa um executável arbitrário e torna um processo de segundo plano detectável e reinicializável?
Se eu tivesse que fazer o script sozinho, usaria um $PIDFILE
e algo do tipo ...
if [ -f $PIDFILE ] && ps -p 'cat $PIDFILE' &> /dev/null; then
# Already running, kill, restart
else
# Stale pidfile, start
fi
Parece que há um programa que faz isso mil vezes melhor do que qualquer coisa que eu tenha criado. Existe?
Se não houver, que ressalvas e armadilhas eu devo ter em mente ao implementar um script como o acima?
Nos sistemas Debian existe start-stop-daemon
. Eu recomendo usar isso, e se você não está no Debian ou no Ubuntu, apenas copie esse script do Debian e tente.
Se você quiser fazer isso em um shell script, você pode usar subshells e fazer algo como:
#!/bin/bash
(
while true; do
echo "I'm process A"
sleep 1
done
) &
(
while true; do
echo "I'm process B"
sleep 3
done
) &
wait
wait
Os comandos entre parênteses são executados em segundo plano, porque, se o e comercial e os comandos wait, garantem que os scripts pai não saiam. É possível salvar o pid dos subshells salvando $!
após cada subshell.
Historicamente, esse monitoramento de processo foi feito pelo programa init
. Hoje, init
pode ter sido substituído pelo seu sistema operacional por uma das várias alternativas propostas: upstart
, systemd
, launchd
(consulte link para uma lista mais longa). Verifique qual o seu sistema operacional usa para ver como ele cria e monitora processos de longa duração.
Tags shell