Usando o Cron para garantir que um processo em segundo plano esteja em execução

1

Estou tentando executar um background PHP Processo que é um consumidor para mensagens do Rabbit MQ. Posso simplesmente executar o script como "php receive.php &", mas preciso garantir que esse script esteja sempre em execução.

Eu montei um script bash que parece tentar encontrar o PID do processo. Se não encontrar o PID, ele inicia o script de volta. Se encontrar o processo, ele apenas ecoa o PID.

Estou tentando executar o Bash Script em um Cron, a cada hora, para garantir que o processo em segundo plano esteja em execução. Mas eu não estou ativando. Se eu executar o script Shell / Bash diretamente. Isso funciona perfeitamente.

Script Bash

p=$(pidof -s php receive.php)
if [[ -z "${p// }" ]]
        then php /var/www/html/example.com/public_html/receive.php &
        else echo 'Receive Already Running';
fi

Linha Crontab -e

# m h  dom mon dow   command
0 * * * * /var/www/html/example.com/public_html/analytics.sh

O que eu posso fazer de diferente, para ter certeza de que esse processo em segundo plano está sempre em execução e, se não estiver, ele deve ser reiniciado?

    
por user1732920 04.05.2018 / 15:56

1 resposta

1

Você pode criar um serviço systemd que execute o script bash, mas o script deve poder ser executado continuamente.

Crie um arquivo em / etc / systemd / system /

[Unit]
Description=Add a description here

[Service]
Type=simple
ExecStart=/var/www/html/example.com/public_html/analytics.sh
Restart=always

[Install]
WantedBy=multi-user.target

execute systemctl daemon-reload e, em seguida, systemctl start SERVICENAME

ou

se o processo que você deseja monitorar já for um serviço systemd, modifique o serviço para ter Restart=always .

editar:

Se o serviço estiver sendo executado como planejado, você precisará enable para ser executado na inicialização: systemctl enable SERVICENAME

    
por 04.05.2018 / 16:21