Verifique se o crontab funciona

48

Eu quero verificar se um certo crontab funciona corretamente. Eu adicionei um trabalho como este:

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

Eu sei que eu redireciono para o dispositivo nulo, mas não tenho certeza se o comando acima é bom.

* Editar 1: No meu / var / log / syslog a cada dois minutos eu tenho o seguinte erro:

 (CRON) error (grandchild #2788 failed with exit status 2)

* Editar 2: nenhum erro nos registros com este novo trabalho:

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1
    
por csgorankings.com 06.12.2011 / 10:58

7 respostas

49

A sintaxe da entrada crontab parece correta. De fato, se você editar seu crontab usando " crontab -e " (como deveria), você receberá um erro se você especificar uma entrada crontab sintaticamente inválida de qualquer maneira.

  1. Em primeiro lugar, o /path_to_my_php_script/info.php é executado corretamente a partir da linha de comando?

  2. Em caso afirmativo, ele também é executado corretamente assim:

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. Se isso funciona, funciona assim?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

O passo (3) é semelhante ao modo como o cron irá executar o seu programa (conforme documentado em "man 5 cron".

O problema mais provável que você está tendo é que o cron PATH está usando para executar o seu programa é muito restritivo. Portanto, você pode adicionar algo como o seguinte ao topo da sua entrada no crontab (você precisará adicionar os diretórios que seu script precisará):

PATH=~/bin:/usr/bin/:/bin

Observe também que o cron usará por padrão /bin/sh , não bash. Se você precisar de bash, inclua isto no início do seu arquivo crontab:

SHELL=/bin/bash

Observe que ambas as alterações afetarão todas as entradas do crontab. Se você quiser apenas modificar esses valores para o programa info.php , poderá fazer algo assim:

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

Também vale ressaltar que em um sistema configurado para "mail" (em outras palavras, um sistema que possui um MTA configurado [sendmail / postfix / etc]), todas as saídas de programas crontab são enviadas para você via e-mail automaticamente. Um sistema de desktop padrão do Ubuntu não terá correio local configurado, mas se você estiver trabalhando em um servidor, basta digitar "mail" em um terminal para ver todos os e-mails do cron. Isso também se aplica ao comando " at ".

    
por jamesodhunt 06.12.2011 / 15:15
22

Não redirecione a saída de erro para / dev / null e grep / var / log / syslog para a saída do cron.

grep cron /var/log/syslog

Você pode mostrar imediatamente erros ao salvar um arquivo depois de editar /etc/crontab ou arquivos dentro de /etc/cron.d/ com:

tail -f /var/log/syslog | grep cron &

Se a edição estiver correta, você só verá a RELOAD notice, erros ocorrerão como

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 
    
por rubiojr 06.12.2011 / 11:20
15

Embora muito raro, às vezes o cron pára de funcionar corretamente mesmo que o serviço esteja em execução. Aqui está como verificar se o crond está em execução e parar / iniciar o serviço.

No Linux:

service crond status
service crond stop
service crond start

No Ubuntu:

service cron status
service cron stop
service cron start
    
por user53817 27.06.2016 / 22:21
13

Você pode ver seu cron ativo com o comando terminal:

crontab -l

Aqui estão os parâmetros na ordem:

  1. min (0 - 59)

  2. hora (0 - 23)

  3. dia do mês (1 - 31)

  4. mês (1 - 12)

  5. dia da semana (0 - 6) (domingo = 0)

  6. comando

Então, você está chamando seu script a cada primeiro minuto de cada hora. Você deve testar sua saída com mais frequência para fins de teste:

* * * * * <command> #Runs every minute

Isso vai chamá-lo a cada minuto!

    
por bioShark 06.12.2011 / 11:11
6

Para a parte do tempo em cada linha, você pode usar este cron tester para testar / verificar sua definição de horário do cron.

    
por Ashish Karpe 20.08.2016 / 18:21
0

ah !!

Obtive a resposta, verifiquei e não encontrei crond dentro do diretório de instalação padrão, por exemplo, /etc/init.d/

agora tentará responder.

note - Eu verifiquei o cron.allow , cron.deny também. Tudo está bem até agora.

    
por luckbychance 23.05.2014 / 15:25
0

Acredito que você também pode usar run-parts para executar tarefas cron fora da banda. Na verdade, é o que o cron usa para executar as tarefas do cron periódico, portanto, fornecendo os argumentos apropriados, você pode executá-los a qualquer momento.

Se você quiser apenas executar um arquivo em vez de todos os trabalhos cron definidos em, por exemplo, /etc/cron.daily , você terá que fornecer o argumento regex juntamente com uma regex válida. run-parts --list --regex '^p.*d$' /etc

Lembre-se de que as tarefas agendadas normalmente são nomeadas sem extensão e marcadas como executáveis, portanto, certifique-se de que seus scripts sejam semelhantes, embora o uso de uma regex possa permitir que você acione um script com uma extensão.

    
por dragon788 17.10.2017 / 20:29

Tags