新しいcronスクリプトをテストするにはどうすればよいですか?


14

私はいくつかの異なるLinuxディストリビューション(Fedora 11、CentOS 5、SuSE 10.2)で実行していますが、多くの場合、cronジョブとして実行する新しいスクリプトがコマンドラインから直接呼び出されると正常に機能するという問題に遭遇します。 cronから呼び出された場合、PATHまたはその他の必要な環境変数がわずかに異なるため失敗します。

crontab全体を実行したり、run.partsを使用してcron.daily / .hourlyなどのディレクトリ全体を実行したりせずに、個々のスクリプトをcronから実行されているかのようにテスト実行する方法はありますか?次の数分でcrontabを一時的に編集してスクリプトを実行できると思いますが、crontabを台無しにするリスクを回避するために、よりスタンドアロンのソリューションが必要です。

回答:


9

Google検索path in crontab

root@pingu # cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

基本的にはPATHを設定したいので、バリエーションを心配する必要はありません。また、簡単なテストは、同じ環境変数を使用してすべてのボックスでSSH経由でスクリプトを実行することです。


おかげで、crontabは、crontab内で環境変数を宣言できるという点で、スクリプトのようなものだとは思っていませんでした。
gareth_bowles 2009年

7

個別にスケジュールされたcronジョブ(crontabの別の行)を実行している場合は、テスト中に1分ごとまたは1分おきにスケジュールします。テストが完了したら、crontab行を編集して、希望する頻度で実行されるようにします。

補足として、cron自体が正常に動作していることをテストし、結果を正しいアドレスにメールで送信する場合(非常に重要)、次の行を/ etc / crontabに追加します。

 * * * * * root ls /doesnotexistfoobar

毎分実行さlsれ、存在しないディレクトリに対して実行を試みます。失敗メッセージを毎分メールで送信する必要があります。正常に機能するようになったら、この行をコメントアウトします。

質問に戻ってください:変更を忘れる可能性があるため、またcron.hourly、cron.daily、またはcron.whateverを頻繁に実行するため、既存のcronジョブを頻繁に変更して頻繁に実行することは避けたいでしょう。あなたがそこに持っているものに応じて、副作用を持つ可能性があります。cronから呼び出されたときと同じ環境でスクリプトを実行していることを確認するには、上記の「ls」トリックを変更することをお勧めします。

crontabに行を追加して、スクリプトを直接実行します。

 * * * * * root /etc/cron.hourly/customscript

そうすれば、テストするのに必要な頻度で実行できます。


ありがとう-正しい答えとしてこれに投票することができたら、私はそうするでしょう!
gareth_bowles 09年

0

私はもっ​​と直接的な解決策を知りませんが、スクリプトの特権を持つユーザー(たとえばcrontest)を作成し、「crontest」ユーザーのユーザー固有のcrontabを使用して編集することでスクリプトをテストできます次の数分でスクリプトを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.