如何添加在所有cron作业之前运行的预挂钩和挂钩后脚本?

时间:2012-03-03 18:15:30

标签: unix cron hook

假设我有以下cron条目:

* * * * * /bin/date

现在假设我想要在cron作业运行之前和之后运行的脚本。

我可以修改cron条目,如下所示:

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

或者如果我想要prehook的退出代码来确定date命令是否运行,我可以这样做:

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

但是,我正在寻找一种解决方案,我可以全局应用于所有cron作业,而无需编辑每个crontab;我认为这类似于您在许多版本控制系统中看到的预提交和提交后挂钩。

2 个答案:

答案 0 :(得分:0)

我不认为使用像Vixie cron未经修改的标准cron实现有一个简单的解决方案。

通过将crontab中的SHELL设置为自定义包装脚本,可以很容易地将单个crontab中的所有作业包装起来,但似乎没有办法全局配置所使用的默认shell。

如果转移到另一个cron实现是一个选项,那么例如。 bcron似乎使用全局包装脚本来实现类似目的。但我不知道这个项目是多么活跃和可用。

答案 1 :(得分: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?