私はいくつかの異なるLinuxディストリビューション(Fedora 11、CentOS 5、SuSE 10.2)で実行していて、cronジョブとして実行したい新しいスクリプトがコマンドラインから直接呼び出されたときに問題なく動作するという問題によく遭遇します。ただし、PATHまたはその他の必要な環境変数のわずかな変動により、cronから呼び出されたときに失敗します。
Crontab全体を実行したり、run-partsを使用してcron.daily/.hourlyなどのディレクトリ全体を実行したりすることなく、cronから実行されているかのように個々のスクリプトをテスト実行する方法はありますか?次の数分でスクリプトを実行するために一時的にcrontabを編集することはできると思いますが、crontabをめちゃくちゃにするリスクを回避するために、よりスタンドアロンのソリューションを用意したいと思います。
From google search on 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経由でスクリプトを実行することです。
個別にスケジュールされたcronジョブ(crontabの別の行)を実行している場合は、毎分または1分おきにスケジュールしてテストします。テストが完了したら、crontab行を編集して、希望する頻度で実行できるようにします。
補足として、cron自体が正しく機能していることをテストし、結果を正しいアドレスにメールで送信する場合(非常に重要)、次の行を/ etc/crontabに追加します。
* * * * * root ls /doesnotexistfoobar
毎分実行され、存在しないディレクトリでls
を実行しようとします。毎分エラーメッセージをメールで送信する必要があります。機能するようになったら、コメントアウトします。
質問に戻ります:おそらく、既存のcronジョブを頻繁に実行するように変更したくないでしょう。なぜなら、元に戻すのを忘れる可能性があり、cron.hourly、cron.daily、またはcron.whateverを頻繁に実行するためです。あなたがそこに持っているものに応じて、副作用をもたらす可能性があります。 cronから呼び出されたときと同じ環境でスクリプトを実行していることを確認するには、上記の「ls」トリックを変更することをお勧めします。
Crontabに行を追加して、スクリプトを直接実行します。
* * * * * root /etc/cron.hourly/customscript
そうすれば、テストに必要なだけ何度でも実行できます。
より直接的な解決策は知りませんが、スクリプトへの特権を持つユーザー(たとえば、crontest)を作成し、「crontest」ユーザーのユーザー固有のcrontabを使用して編集することでスクリプトをテストできます次の数分でスクリプトが実行されるようにします。