O trabalho do Cron não será executado (questão pgrep)

1

Estou executando um cron job a cada minuto, que inicia um script de shell bash:

# Automatically reboot the server if it goes down
* * * * * /root/auto-restart.sh

Eu posso executar manualmente o script, mas sempre que eu tentar executá-lo através de um cron job, ele não será executado. Eu depurei um pouco e achei esse comando o culpado:

pgrep -fcl auto-restart.sh

Para resumir, quando executado manualmente, esse comando retorna o valor correto e apenas lista auto-restart.sh se o script estiver sendo executado (como deveria).

Mas quando a tarefa cron inicia, mostra a saída de pgrep -fl auto-restart.sh da seguinte forma (quando está em execução):

3110 sh
3111 auto-restart.sh

Aqui está o código que estou trabalhando:

scriptcheck='pgrep -fcl auto-restart.sh'
if [ $scriptcheck -gt 1 ]; then
    echo "auto-restart.sh script already in use. Terminating.."
    #cron job debugging..
    echo "[DEBUG] scriptcheck returning greater than 1" > /tmp/debug.output
    echo "[DEBUG] Value of scriptcheck: ${scriptcheck}" >> /tmp/debug.output
    echo "[DEBUG] contents:" >> /tmp/debug.output
    pgrep -fl auto-restart.sh >> /tmp/debug.output
    exit
fi

Complete o script aqui: link

    
por johndoe 12.10.2018 / 09:44

1 resposta

2

Quando cron é executado em /root/auto-restart.sh , ele é executado usando sh , nas linhas de sh -c /root/auto-restart.sh . Como você usou a opção -f com pgrep , pgrep procura auto-restart.sh em qualquer lugar nas linhas de comando dos processos em execução; então combina auto-restart.sh e sh -c /root/auto-restart.sh . Este último aparece como sh na saída de pgrep -l .

pgrep -c auto-restart.sh

lhe dará o comportamento que você está procurando. (Eu perdi -l porque não tem sentido com -c .)

(Seu servidor provavelmente tem um timer de watchdog , que pode ser mais apropriado - embora eu imagine que, se o servidor estiver ainda funcionando suficientemente bem para executar trabalhos cron, mas é considerado baixo, então o cão de guarda não tropeçaria.)

    
por 12.10.2018 / 09:50