Como posso saber se meu trabalho cron horário foi executado?

26

Eu criei um arquivo chamado ntpdateno/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

Eu também fiz o Chmod 755 nesse arquivo.

No entanto, não sei dizer se o arquivo foi executado ou não!

O arquivo não é criado em nenhum dos três diretórios.

Se eu executar manualmente cd / && run-parts --report /etc/cron.hourly, os arquivos serão criados e eu recebo o eco.

Alguém pode recomendar (idealmente passo a passo!) Instruções para testar se está funcionando?

wilhil
fonte

Respostas:

25

Uma grande armadilha para o cron é que o cron é executado em um ambiente shell extremamente limitado, como resultado, muitas variáveis ​​não são exportadas para o ambiente, principalmente $ PATH. Certifique-se de usar todos os caminhos absolutos para executável, incluindo funções comuns como echo, uptime, date, etc toda a necessidade de usar caminhos completos ( /bin/echo, /bin/date, /usr/bin/uptime). Para determinar o caminho para um executável, você pode usar o whichcomando da seguinte maneira: which echo- isto mostrará o caminho completo para essa ferramenta.

Marco Ceppi
fonte
Como discutido no bate-papo, obrigado por isso e espero realmente que ajude outra pessoa ... Enquanto eu segui o caminho para o ntpdate, estou tão acostumado com o Windows e com o eco / data apenas "incorporado", mas simplesmente não o fiz. acho que eu precisaria de um caminho completo ... aprendendo muito mais sobre Linux e faz todo o sentido!
Wilil
36

Você deve procurar no seu /var/log/syslogarquivo de log. Se um cron foi executado, ele teria uma linha como:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Para obter dicas de solução de problemas, consulte https://help.ubuntu.com/community/CronHowto#Trou Troubleshooting_and_Common_Problems

Lekensteyn
fonte
Não há nada no Syslog e eu não consigo ver nenhuma razão por que ele iria falhar a partir desse link :(
wilhil
1
Se não houver entradas no syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), comece a verificar se o daemon cron está em execução: ps uww -C crondeve conter uma linha com um processo.
Lekensteyn
Desculpe por ser enganoso, há entradas para o Cron no syslog, apenas nada relacionado a este comando ... Eu sei que alguns trabalhos são executados a cada hora, recebo um novo alerta por email ... AFAIK, os que estão trabalhando são de crontab, não há nada no cron.hourly que é o que eu estou tentando começar a trabalhar
wilhil
2

Tente alterar a primeira linha do seu script (o intérprete) para:

#!/bin/bash

Eu também tive problemas no passado, com variáveis ​​de ambiente e problemas de PATH. Depois de mudar o intérprete para os bashmeus problemas se foram.

Awi
fonte
1

Dado que adicionei o clearme.shscript em/etc/cron.hourly/

Basta filtrar as tarefas do CRON no terminal com o poderoso egrep e awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

A saída será semelhante a:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Para explicar tudo passo a passo:

  1. cat / var / log / syslog - imprima-me o log do sistema
  2. egrep clearme - mas apenas selecione linhas que contenham o texto clearme
  3. awk "{print $ 1}" - imprima-me a linha que contém o texto clearme
  4. > ~ / Desktop / cronlog.txt - gera os resultados no arquivo cronlog.txt localizado no diretório Desktop .

O quarto passo é opcional. Apenas imprimirá os resultados no terminal em vez do arquivo.

Daniel Andrei Mincă
fonte