単純なRubyスクリプトを1分、5分、1時間ごとに定期的に実行するために3つのcrontabジョブを設定しました。彼らは処刑をしますが、何もしません。私のコンピュータには1人のユーザー(root
)だけがあり、コマンドを実行してcrontabを設定しましたcrontab -e
。crontab -l
現在のcrontabジョブを一覧表示します。
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
実行されていることがわかりますが、正しい間隔で実行されず、何もしません。一方、これらのRubyファイルを手動で実行すると正常に動作します。 Rubyプログラムが100%動作しているか、テストに合格しているかなどを確認できます。以下は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)
私がここで何を見逃しているのでしょうか?
答え1
一般的に言えば、これが環境問題であることがわかります。 cronでスクリプトを実行すると、/etc/profile
スクリプトは実行されません。/etc/profile
スクリプトの先頭からソースコードを取得したり、スクリプトに必要な変数を設定したりできます(PATH
これは私がすぐに考えたものです)。
env
cronで何かを実行するときに環境が正確にチェックされるように、コマンドを実行する小さなスクリプトを作成してファイルに接続することをお勧めします。設定する必要がありますが、そうでない項目を見つけるのに役立ちます。
答え2
これらのジョブが1分、5分、1時間ごとに実行されるように設定されていません。 3つの設定はすべて、勤務時間以降:01、勤務時間以降:05、勤務時間以降:00で毎時間実行するように設定されています。代わりに、次のことを試してみてください。
* * * * * echo 'run every minute'
*/5 * * * * echo 'run every 5 minutes'
0,5,10,15,20,25,30,35,40,45,50,55 * * * * echo 'alternate every-five-minute'
0 * * * * echo 'run every hour on the hour'