Faça o cron checar se o script bash está executando

1

Eu tenho um script bash que os usuários while do , juntamente com sleep , monitoram constantemente o estado da conexão e tomam medidas no caso de algo dar errado. A única coisa que não é protegida é a execução do próprio script de verificação.

Eu gostaria de ter o myscript.sh executado na inicialização via init.d e depois ter a tarefa CRON executada a cada minuto para ver se o script que eu executei na inicialização automaticamente ainda está em execução. Como posso conseguir isso?

    
por Maxim V. Pavlov 11.08.2015 / 19:35

1 resposta

2

Com um sistema init moderno (como systemd ou upstart), você pode fazer com que o sistema init cuide de reiniciar o script se ele falhar.

Se por algum motivo você estiver preso a um sistema legado, você pode fazer com que o script atualize periodicamente um arquivo de sinalizador ( touch /var/lib/myapp/flagfile ) e, depois, verificar se o arquivo de sinalização é mais antigo que um determinado número de segundos. e reinicie o script, se necessário. Algo como:

# get current time (in seconds since the epoch)
now=$(date +%s)

# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)

if [ $(( now - last_update )) -gt $interval ]; then
    restart_script_here
fi

Usando o systemd

Se você tiver o systemd disponível, basta criar um .service. unit with the Restart = sempre key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in / etc / systemd / system / myscript.service ':

[Unit]
Description=This is my nifty service.
# Put any dependencies here

[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always

[Install]
WantedBy=multi-user.target

E, em seguida, ative-o com:

# systemctl enable myscript
# systemctl start myscript

Usando o cron

Em vez de executar um script persistente, você poderia simplesmente executar uma tarefa cron normal que executaria todas as verificações e remediações necessárias. Você ficaria limitado a verificar uma vez por minuto, mas se essa frequência for aceitável, provavelmente será uma solução mais simples.

    
por 11.08.2015 / 19:50