cronジョブが期待どおりに機能しない


1

3つのcrontabジョブをセットアップして、単純なルビースクリプトを1分ごと、5分ごと、1時間ごとに定期的に実行します。彼らは実行しますが、何もしません。マシン(root)には1人のユーザーしかいませんし、コマンドを実行してcrontabを設定しましたcrontab -ecrontab -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プログラムが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)

ここに何が欠けていますか?


多分ルビーへのフルパス?/ usr / bin / ruby​​が好きですか?
JdeHaan

回答:


1

これらのジョブを1分ごと、5分ごと、1時間ごとに実行するように設定していません。3つはすべて、1時間に1回、1時間を過ぎて01、1時間を過ぎて05、1時間を過ぎて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'

なんてバカなんだ...これはすっかり見逃した どうもありがとうございます!あなたのおかげで幸せになれた!
ジェダイ

RVMサイトで誤って「インストールされているすべてのrubyおよび作成されたgemsetに対して、RVMはgem、rake、rubyなどの基本的なコマンドラインツールのラッパーを作成します」というメモを見つけました/usr/local/rvm/wrappers/ruby-2.3.0/ruby /path/to/script.rb
ジェダイ

2

通常、これは環境の問題であることがわかります。cronからスクリプトを実行しても、/etc/profileスクリプトは実行されません。/etc/profileスクリプトの開始時にソースを取得するか、スクリプトに必要な変数のみを設定できます(PATHすぐに頭に浮かぶ変数です)。

envコマンドを実行し、それをファイルにパイプする小さなスクリプトを作成することをお勧めします。これにより、cronから何かを実行するときに環境が正確にわかるようになります。設定する必要のないものを見つけるのに役立つはずです。


ありがとうございました。また、適切な間隔で実行されないことに気付きました。最初のジョブは5分ごとに、2番目のジョブは1時間ごとに、最後のジョブは1時間ごとに実行する必要がありますが、ログでわかるように、適切な間隔で実行されません。何か案は?
ジェダイ

2
私はそれを見ていませんでした。crontabの分は、スクリプトを実行する時間であり、何分離れているかではありません。コンマで区切られた分(00,05,10,15、...)のリストを追加して、必要な処理を実行できるようにする必要がありますが、それは面倒です。少し調べてみると、5分ごとに* / 5、2分ごとに* / 2、1分ごとに* / 1を実行できるはずです。
ジェームズC.ウッドバーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.