2012-03-03 4 views
2

は、私は次のcronエントリがあるとします。すべてのcronジョブの前に実行されるプリフックスクリプトとポストフックスクリプトを追加するにはどうすればよいですか?

* * * * * /bin/date 

今、私は前にcronジョブを実行した後、両方のスクリプトを実行したいと仮定します。

私はこのように見えるようにcronのエントリを変更できます。

* * * * * /bin/prehook ; /bin/date ; /bin/posthook 

をまたは私はかどうかdateコマンドの実行を決定するためにprehookの終了コードを望んでいたならば、私はこれを行うことができます:

* * * * * /bin/prehook && /bin/date ; /bin/posthook 

しかし、私はすべてのcrontabファイルを編集せずにすべてのcronジョブにグローバルに適用できるソリューションを探しています。これは、多くのバージョン管理システムで見られるように、プレコミットとポストコミットのフックに似ています。

答えて

0

Vixie cron unmodifiedのような標準的なcronの実装を使用すると簡単な解決策はないと思います。

crontabのSHELLをカスタムラッパースクリプトに設定することで、単一のcrontab内のすべてのジョブを簡単にラップできますが、使用されるデフォルトのシェルをグローバルに構成する方法はないようです。

別のcron実装に移動することがオプションの場合は、 bcronは、同様の目的でグローバルラッパースクリプトを使用しているようです。しかし、私はこのプロジェクトがどれくらい生き生きとしているか分かりません。

0

私が使用するシステムはcrontabエントリはいつものような、単一のスクリプト名で構成されていることである。

3 1 * * * /home/me/bin/Cron/daily 

/home/me/bin/Cron/daily内のスクリプトは、実際には何を見て、単一のスクリプト、runcronへのリンクありそれは呼び出されます(例えばdaily)。それは私の環境を設定します(cronは最小環境の極端なもの以上を設定していないので)、その後/home/me/bin/dailyを実行します。 cronのデバッグやプリフックやポストフックの追加が必要な場合は、グローバルに(/home/me/bin/Cron/runcronを変更して)ローカルで(/home/me/bin/Cron/dailyを通常のruncronスクリプトの変更されたコピーにして)行うことができます。この柔軟性は、私が必要とする機会に非常に役立ち、実際のcrontabエントリーに変更はありません。

私のスクリプトは引数が提供されていればそれを中継します。しかし、私は長期的にその機能を使用する十分な理由を見いだせませんでした。 dailyweekdayweeklymonthlyのエントリがあります。 (Where can I set environment variables that crontab will use?も参照してください)

+0

解決策はcronを変更します。理想的には、すべてのシングルcronエントリを変更する必要はありません。しかし、ラッパーのソリューションは、私が行く必要がある方法かもしれません。 – Pete

関連する問題