Detectar processo se não for encontrado, em seguida, execute-o

1

Estou executando vários processos na inicialização usando "crontab -e"

@reboot tranmission-daemon && python defualt.py && python MonitorService.py

Mas, por alguma razão, esse serviço pode terminar sozinho devido a hdd insuficiente, ou o host da web o matou, como eu verifico se esse serviço foi cancelado e eu o executo novamente?

Estou usando o CentOS 6

    
por user157339 26.12.2013 / 13:28

3 respostas

2

Eu recomendo supervisord (supervisord dot org), que por acaso é escrito em Python.

Aqui está um artigo para instalá-lo usando o gerenciador de pacotes Python: Processos Unix de Herd com Supervisor .

Se você preferir usar o RPM, use este guia: Supervisor Running 3 no CentOS 5

Responda se você tiver algum problema. É uma ótima ferramenta quando você trabalha.

    
por 26.12.2013 / 18:57
3

Não tenho certeza sobre seus scripts python, mas o aplicativo de transmissão inclui um serviço init.d que você deve iniciar, em vez de fazer algo personalizado, como iniciá-lo por meio de uma entrada crontab.

Você pode verificar se o serviço de transmissão está configurado para iniciar em qualquer um dos runlevels do seu sistema.

Exemplo

$ chkconfig --list | grep transm
transmission-daemon 0:off   1:off   2:off   3:off   4:off   5:off   6:off

Se eles estiverem desligados, você poderá alterá-los para que eles sejam iniciados na reinicialização da seguinte forma:

$ sudo chkconfig --level 345 transmission-daemon on

Agora, quando verificarmos, você verá que está configurado para iniciar nos níveis de execução 3,4, & 5.

$ sudo chkconfig --list | grep transm
transmission-daemon 0:off   1:off   2:off   3:on    4:on    5:on    6:off

Isso cuidará de iniciá-lo na próxima vez que você reiniciar. Para iniciá-lo agora sem precisar reiniciar o sistema, você pode fazer assim:

$ sudo /etc/init.d/transmission-daemon start
Starting transmission-daemon:                              [  OK  ]
$

Outros scripts

Se você quiser ter certeza de que os scripts do Python permaneçam ativos, você pode criar outra entrada do crontab que verifique periodicamente se eles estão sendo executados e, se não, iniciá-los. Ou você pode abandonar a entrada @reboot crontab todos juntos e apenas ter uma única entrada crontab que verifique periodicamente se eles estão em execução e reiniciá-los se eles morrerem.

Exemplo

Em /etc/cron.d , você pode criar um arquivo, chkr.cron , assim:

*/5 * * * * root /usr/local/bin/chkr.bash

Em seguida, crie o script /usr/local/bin/chkr.bash , que seria assim.

#!/bin/bash

pgrep -f "python default.py"       || python default.py
pgrep -f "python MonitorService.py || python MonitorService.py
    
por 26.12.2013 / 16:01
0

Instale o monit. É fácil de configurar e pode verificar processos e reiniciá-los, se eles não estiverem lá.

    
por 26.12.2013 / 18:14