O comando Cron não está funcionando, mas funciona com shell

0

Eu tenho um cronjob extremamente simples que configurei para ter certeza de que um script continua rodando, e me mande um email se ele cair (baixa tecnologia, eu sei, mas foi planejado como uma solução rápida)

Infelizmente, este cronjob não está fazendo o seu trabalho

Aqui está a linha relevante do meu crontab:

* * * * * pgrep -f app.py || echo "Your app is down" | mail -s "URGENT" [email protected]

Quando executo o comando no shell, ele funciona: Eu recebo um email apenas se o aplicativo estiver inativo. Como um efeito colateral menor, quando o aplicativo está em execução, ele envia o PID para a tela.

Quando executo o comando por meio de um cronjob, nunca recebo nenhum email. Investigando (configurando o parâmetro MAILTO= para ver a saída do cronjob) notei que quando o aplicativo está rodando, ele gera dois PIDs, e quando o aplicativo não está rodando ele gera um PID (nunca zero, por isso nunca envia um email)

É quase como se o cronjob estivesse criando um processo que, por sua vez, é visto por si só - muito parecido com como a digitação ps -ax | grep "anything" sempre retornará:

12345 pts/2    S+     0:00 grep --color=auto anything

Alguém sabe como consertar este cronjob?

    
por stevendesu 02.06.2017 / 20:26

1 resposta

1

Para quem se depara com isso no futuro, a solução foi bastante simples:

Ao executar

pgrep -f "anything"

em um cronjob, ele retornará um processo para o shell bash gerado pelo cron.

Em vez disso, tive que usar

ps -ax | grep "anything" | grep -v grep

para procurar o processo em execução e remover simultaneamente qualquer processo que tenha "grep" no nome

    
por 05.09.2017 / 20:11