Que tal mudar a linha do cron para:
0 3 * * * /bin/bash /home/myapp/current/script/send_insurance_reminders.sh
MAILTO="jnylund@***"
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/myapp/current/script/fetch_emails.sh
0 3 * * * /home/myapp/current/script/send_insurance_reminders.sh
Oi, o primeiro trabalho é executado a cada 5 minutos, o outro não parece estar sendo executado (não há arquivo de log, nenhum erro de e-mail, nada). Eu tenho que estar fazendo algo idiota ... alguma idéia? Corre bem na linha de comando.
Aqui está o script de shell:
cd /home/myapp/current;rake send_insurance_reminders RAILS_ENV=production >> /home/myapp/current/log/insurance_reminders.log
O arquivo de log não foi atualizado desde a última vez que executei manualmente
Que tal mudar a linha do cron para:
0 3 * * * /bin/bash /home/myapp/current/script/send_insurance_reminders.sh
Você está esperando até 3:00 para que seja executado, certo?
Em caso afirmativo, isso depende de uma variável de ambiente definida em seu shell de login?
O script de shell tem as permissões Ler e Executar adequadas?
Cron irá ignorar uma entrada sem uma nova linha - verifique novamente se você tem uma nova linha (ou duas!) após a última entrada.
Como você editou o arquivo crontab?
Dependendo da sua implementação do cron, pode não estar selecionando mudanças no arquivo crontab se você editá-lo diretamente. Se este for o caso, edite o arquivo crontab com o comando crontab -e
ou informe o processo cron sobre as mudanças (veja a página de manual da sua implementação do cron sobre como fazer isso).
Muitas implementações cron modernas notam mudanças automaticamente. Esta pode não ser a solução correta no seu caso, mas é uma possibilidade e eu não a vi mencionada ainda.
Para ajudar no diagnóstico, você pode adicionar logger
declarações ao início e ao fim do seu cron para que as mensagens sejam enviadas para o syslog:
logger -t fetchmail Mail Fetch Started; /home/myapp/current/script/fetch_emails.sh && logger -t fetchmail Mail Fetch Completed
O motivo pelo qual você deseja um "& &" antes da mensagem final é para que, se o seu script não for executado, ele nunca enviará a mensagem completa para o syslog.
Eu pessoalmente gosto de usar tags ( -t
) para facilitar o seu syslog.
Você não disse explicitamente que seu script funciona. Supondo que isso aconteça, certifique-se de que o cron está sendo executado como você. Se não estiver, certifique-se de que o usuário que está executando o cron tenha permissões de execução para o script.
Ao solucionar problemas, eu também gosto de su para esse usuário (geralmente usando su - username
) e executar o script manualmente.
Tags cron