2011-11-15 1 views
25

最近cronジョブを追加しましたが、コマンドを実行している間にパスを間違えてしまったため、ジョブは成功しませんでした。私たちが行ったcronの変更をテストする方法はありますか?テストランcronエントリ

私は実際にコマンドラインからコマンドをコピーして貼り付けていたことに注意してください。これは、これを引き起こしたばかりのキーストップでした。

答えて

20

この質問もserverfault and has garnered a couple additional answers

は、以下にMarco's solutionの言い換えバージョンである頼まれましたそして、THAを使用してコマンドを実行しrun-as-cronと呼ばれるシェルスクリプトを作成

* * * * * /usr/bin/env > /home/username/cron-env 

に一時的なcronのエントリで環境ファイルを作成します。 t環境です。

run-as-cron <cron-environment> <command> 

例えば:

#!/bin/sh 

. "$1" 
exec /usr/bin/env -i "$SHELL" -c ". $1; $2" 

次いで、それをこのように使用されています

run-as-cron /home/username/cron-env 'echo $PATH' 
+0

あなたはどこからコマンドを実行しましたか? -as-cron **? –

+0

@IgorGanapolskyわかりませんが、上記のシェルスクリプトの名前である可能性があります。 – ptf

+0

"run-as-cronと呼ばれるシェルスクリプトを作成する" – RichardAtHome

38

私は自分のcronジョブをテストしたいときに、私は通常間隔を非常に低く設定し、ログを厳密に監視します。エントリーが正しいと確信したら、間隔を元の値に戻します。例えば

、ジョブ実行ごとに2分:

*/2 * * * * echo "Hello World"

そして、私は私のログファイルにtail -fを実行する(Debianでは/var/log/syslog)。 (最高ediquiteリンクが唯一の答え提供していないか、他の誰かの解決策コピーされていない場合はわからない)

を :

+6

これは、1分を除いても同様です...しかし、私は、コマンドでコマンドを実行するようにcrontabに依頼する方法があってほしいので、常に1分まで待つ必要はありませんcrontabがコマンドを実行するまで、それが実行されるかどうかを確認するだけです。 – Teekin

+0

最も近いものは '/ bin/sh'を実行することです。次に、cronから直接複雑なコマンドを実行しないでください。代わりに外部スクリプトを使用してください! –

+2

正確には、/ bin/shの実行がcronジョブではなくcronジョブではなく、次回に動作するかどうかを40〜50秒待っているだけであっても、デバッグは非常にイライラします。 – Teekin

2

ジョシュアの答えは私のためには機能しません。二つの問題:cron-envファイルで

  • 変数は(set -aが必要)エクスポートされません。

  • スクリプトは現在のtty(setsidが必要)に関連付けられています。

スクリプトrun-as-cron

#!/bin/sh 

. "$1" 
exec setsid /usr/bin/env -i "$SHELL" -c "set -a; . $1; $2" </dev/null 

が足りません彼の答えを修正したり、コメントを追加する担当者」...

0

useコマンドのcrontab -e これは、vimのエディタを開きますする必要がありますここでやるべきことは、 * * * * * /somepath/urscript.shです。日付とスクリプトのパスの間に適切なスペースがあることを確認してください。 実行後、/ var/spool /郵便物 スクリプトの実行またはエラーが完全に追跡されます。 テストのためには方法はありません..しかし、ur sh urscript.shが動作する場合、cronタブは問題なく動作します。