使用 FreeBSD 9,我想知道将 /etc/crontab 分成几个文件的好方法是什么。
例如,我想将所有与 postfix 相关的作业放在 /etc/cron.d/postfix 中,将所有与 logrotate 相关的作业放在 /etc/cron.d/logrotate 中,等等。
当然,我可以使用周期性的,但似乎所有作业都会在大约同一时间执行。
任何想法?
根据 man 1 cron,它搜索 /var/cron/tabs/< usernames> 和 /etc/crontab。
编辑 1:我可能想尝试这样做的原因,正如 voretaq7 的回答中所问。
有些公司使用劣质的自制供应链管理没有 cron 插件也没有 augeas 工具。
编写一些安装第三方软件的脚本:在 /etc/crontab 末尾附加作业是肮脏的。
请注意,/etc/rc.conf 和 /usr/local/etc/sudoers 已经具有此功能,因此我想知道是否有“FreeBSD 方式”来执行计划作业的此功能。
答案1
事实上,我更喜欢定期脚本而不是 cronjobs,因为定期脚本会按顺序执行所有脚本。您还可以添加更多定期模式,例如将脚本放入目录中/etc/periodic/8hourly
并添加 crontab 条目0 */8 * * * periodic 8hourly
来运行它们。
对于具有不同用户 ID 的子系统,您可以添加用户特定的 crontab 文件(以crontab -u $user -e
, 文件结尾/var/cron/tabs/$user
)——但恕我直言,这比一个中心文件更难维护。
答案2
FreeBSD 的 cron 是传统的 Vixie cron——它不支持您的要求。
坦白说,我不明白你为什么要这样做:你为什么要将 crontab 分散到一堆文件中,这样你就无法清楚地了解什么时候运行了什么?
我一直觉得按周期/频率(每小时、每天、每周、每月、每年)排序的传统 crontab 非常易于阅读,并且在向计划表添加新内容时也很容易理解。
如果您想按功能单元划分 crontab,您也可以这样做 - 只需创建由空格和注释分隔的块。
如果这对于您的用例来说还不够,并且您真的想要 Linux 风格的 cron 结构,带有cron.d
目录和子文件,你可以拥有它:只需安装anacron
从端口树(sysutils/anacron
)中,并根据需要进行配置。
确保记录你所做的事情-- 在我的职业生涯中,我遇到过很多 FreeBSD 系统,但我从未遇到过不运行标准 Vixie cron 的系统。如果您创建的环境与通常的做事方式不同,您会希望每个人都知道您为什么改变它,以及他们应该如何处理系统。