cron executa mas nada acontece

4

Eu criei um script chamado "forward_email.sh" e configurei permissões para 777. Ele contém a seguinte linha:

echo "It worked: $(date)" >> /home/noc/email.log

Eu criei um cron job com a seguinte linha:

*/5 * * * * /home/noc/forward_email.sh

O problema é que o arquivo "email.log" nunca é alterado. Eu até defini as permissões para 666. Quando eu executo o script manualmente, ele funciona perfeitamente.

A tarefa cron está sendo executada de acordo com o arquivo "/var/log/cron.log".

Alguém pode me apontar na direção certa sobre o que pode estar errado? Esta é uma instalação mínima de máquina virtual do Ubuntu Server 9.04 com o cron instalado via apt-get.

UPDATE : cometi um erro muito estúpido. Eu nomeei meu script "forward_mail.sh". Eu não fui até que eu instalei alguns serviços de e-mail e recebi o seguinte e-mail de erro do Cron que eu descobri o meu erro.

/bin/sh: /home/noc/forward_email.sh: not found

Eu alterei o nome do arquivo e ele funciona agora.

    
por Joseph 04.08.2009 / 05:49

4 respostas

6

Muitas coisas potenciais fora do topo da minha cabeça.

Tem certeza de que a entrada do crontab está realmente apontando para o seu script? Por exemplo, se você quer rodar um script como ~ noc / bin / script.sh , mas tem uma entrada como / home / noc / bin / script (ie um erro sutil), então é claro que não vai funcionar. Eu costumo verificar minhas entradas crontab, copiando o comando de crontab com o meu mouse, em seguida, colá-lo em um prompt de comando, apenas para ter 100% de certeza de que ele vai executar o que eu quero.

O seu script contém apenas a linha indicada? Normalmente você tem que incluir algo como:

#!/bin/bash

... no topo do seu script para que ele funcione.

Se for mais complicado do que a linha única, você tem certeza de que a lógica de programação permitirá que ela rode aquela linha em particular?

Tente reduzir seu script para

#!/bin/bash
echo "Bing!" >> /tmp/cronjob

... para ver o que acontece. Se isso funcionar, você tem um problema de programação no script do cron. Se falhar, você tem um problema com o cron.

O usuário 'noc' é quem está executando o script? Caso contrário, você tem certeza de que o usuário que está executando o script cron tem acesso de leitura / gravação por meio de / home / noc ao arquivo email.log?

Onde está o e-mail de erro do usuário que está executando o cronjob? Um e-mail de erro está sendo gerado e, em seguida, ser enviado para algum lugar em que você não esteja esperando ou talvez seja abandonado completamente? Tente um cronjob de

#!/bin/bash
echo "Bing!"

... e tente descobrir onde o e-mail gerado é gerado.

São cron.deny e / ou cron.allow em jogo? Se /etc/cron.allow existe, então o usuário noc deve estar listado nele; se /etc/cron.deny existir. o usuário noc deve não estar listado nele. Em RedHat, se nem o cron.allow nem o cron.deny existirem, então SOMENTE o usuário root terá permissão para usar o cron.

    
por 04.08.2009 / 06:14
5

O Cron é executado com um conjunto limitado de variáveis de ambiente, especialmente seu $PATH . Tente colocar o caminho completo para qualquer binários. Então /home/noc/forward_email.sh deve ser:

/bin/echo "It worked: $(date)" >> /home/noc/email.log

Além disso, o que */5 faz no início do script? */5 é executado uma vez a cada cinco minutos, 5 é executado uma vez '5 minutos após a hora a cada hora.

5    *   *   *    * /home/noc/forward_email.sh
#*   *   *   *    *  command to be executed
#-   -   -   -    -
#|   |   |   |    |
#|   |   |   |    +----- day of week (0 - 6) (Sunday=0)
#|   |   |   +------- month (1 - 12)
#|   |   +--------- day of month (1 - 31)
#|   +----------- hour (0 - 23)
#+------------- min (0 - 59)

Por fim, você editou & salve o crontab com o seguinte comando:

crontab -e

... onde seu editor é escolhido pela variável de ambiente $EDITOR ?

    
por 04.08.2009 / 06:22
1
echo "It worked: $(date)" >> /home/noc/email.log

O /home/noc/email.log existe antes de você executar o script? É gravável pelo usuário executando o cron job? O que acontece se você criar de antemão? por exemplo,

touch /home/noc/email.log
chmod 666 /home/noc/email.log
    
por 04.08.2009 / 06:43
0

Se você tiver alguma dúvida sobre seu roteiro, coloque a linha abaixo no topo do roteiro:

 #!/bin/bash -x

(se você não usa este shell, basta colocar o bom)

Iniciando o subshell com a opção -x (e X plicit), que executará todo o script no modo de depuração. Traços de cada comando mais seus argumentos são impressos na saída padrão após os comandos terem sido expandidos, mas antes de serem executados.

    
por 21.12.2011 / 19:33

Tags