Eu configurei 3 tarefas crontab para executar meus scripts ruby simples periodicamente a cada minuto, 5 minutos e hora. Eles executam, porém não fazem nada. Tenho apenas um usuário na máquina ( root
) e configurei o crontab executando o comando crontab -e
. crontab -l
lista meus trabalhos crontab atuais:
5 * * * * ruby /root/www/server-monitoring/current/tasks/cpu_check.rb
0 * * * * ruby /root/www/server-monitoring/current/tasks/free_disk_space.rb
1 * * * * ruby /root/www/server-monitoring/current/tasks/free_ram_check.rb
Eu posso ver que eles executam, mas não nos intervalos certos e também não fazem nada, enquanto que se eu executar esses arquivos ruby manualmente, eles funcionarão perfeitamente bem. Posso confirmar que os programas ruby funcionam bem 100%, passam nos testes, etc. Aqui estão os logs do crontab:
Dec 6 15:45:01 monitoring-jedrzej CRON[28281]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 6 15:55:01 monitoring-jedrzej CRON[28478]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 6 16:00:01 monitoring-jedrzej CRON[28584]: (root) CMD (ruby /root/www/server-monitoring/current/tasks/free_disk_space.rb)
Dec 6 16:01:01 monitoring-jedrzej CRON[28614]: (root) CMD (ruby /root/www/server-monitoring/current/tasks/free_ram_check.rb)
Dec 6 16:05:01 monitoring-jedrzej CRON[28702]: (root) CMD (ruby /root/www/server-monitoring/current/tasks/cpu_check.rb)
Dec 6 16:05:01 monitoring-jedrzej CRON[28703]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Dec 6 16:15:01 monitoring-jedrzej CRON[29214]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
O que estou perdendo aqui?
Geralmente, você descobrirá que este é um problema ambiental. A execução de um script do cron NÃO executa o
/etc/profile
script. Você pode/etc/profile
obter no início do script ou definir apenas as variáveis necessárias para o seu script (PATH
é uma que vem rapidamente à mente).Sugiro criar um pequeno script que execute o
env
comando e o canalize para um arquivo para que você possa ver exatamente qual é o seu ambiente ao executar algo do cron. Deve ajudá-lo a encontrar o que não está definido que precisa ser.Você não configurou esses trabalhos para serem executados a cada minuto, a cada 5 minutos e a cada hora. Todos os três são configurados para serem executados uma vez por hora, às :01 após a hora, :05 após a hora e :00 após a hora. Em vez disso, você pode tentar algo como