Quer que um processo seja executado para sempre e apenas uma vez?
Basta usar meu script bash simples e aproveitar 🙂
#!/bin/bash
while [ 1 ]; do
pcount=`ps -ef | grep NAME_OF_YOUR_PROCESS | awk '{print $2}' | wc -l`
if [ "$pcount" != "2" ]; then
echo "Killing all NAME_OF_YOUR_PROCESS processes"
ps -ef | grep NAME_OF_YOUR_PROCESS | awk '{print $2}' | xargs kill -9
COMMAND_TO_START_YOUR_PROCESS &
fi;
sleep 1;
done;
claro que você tem que substituir
NAME_OF_YOUR_PROCESS
com o nome do processo que pode ter apenas uma instância (o nome mostrado em ps -ef ou ps-aux)
e
COMMAND_TO_START_YOUR_PROCESS
com o comando com o qual você inicia seu processo
você está se perguntando por que eu escrevi:
if [ "$pcount" != "2" ]; then
grep => 1 processo
seu processo => 1 processo
seu processo segunda instância => 1 processo e assim por diante …
então se você tiver dois processos você terá grep e seu processo, então está tudo bem …
se você tiver uma instância você só tem grep … então você tem que iniciar seu processo novamente
se você tiver mais de duas instâncias que você tem grep e seu processo foram iniciados mais de uma vez, então você deve matar todas as instâncias do seu processo e reiniciá-lo para que você tenha apenas uma instância …
você tem que executar meu script de shell com:
filename &
onde nome do arquivo é o nome com quem você salvou o arquivo
exemplo para noip
#!/bin/bash
while [ 1 ]; do
no_ip_cnt=`ps -ef | grep noip2-i686 | awk '{print $2}' | wc -l`
if [ "$no_ip_cnt" != "2" ]; then
echo "Killing all noip processes"
ps -ef | grep noip2-i686 | awk '{print $2}' | xargs kill -9
/path/to/noip/noip-i686 &
fi;
sleep 1;
done;