我的 crontab 看起来像这样;
1 * * * * /var/www/cron/site1.sh > /dev/null 2>&1
0 * * * * /var/www/cron/site2.sh > /dev/null 2>&1
3 * * * * /var/www/cron/site3.sh > /dev/null 2>&1
这非常有效,让我可以将所有令人讨厌的小脚本调用放到一个地方,而不是使 crontab 比现在更难阅读。
site2.sh
但是,当需要每天运行一个脚本、每周运行一个脚本、每 5 分钟运行一个脚本时,这种方法就会失败。当然,随着新脚本的添加,情况会变得更糟。
有没有更好的办法?
编辑
我所说的更好是指使其更易于管理,拥有一个大型的 crontab 是不可管理的,但是到处都有脚本也是不可管理的。
不一定是 GUI。
答案1
让 crontab 更易于管理,这是我多次梦想的事情。但归根结底,如果您需要安排 20 个脚本运行 - 好吧 - 您需要安排 20 个脚本运行。
至少对我来说,主要问题一直是在 中/etc/crontab
(或用户的 中crontab -e
)创建新条目。尤其是当这些新条目设置为与现有条目(甚至是列表的条目数)。
比如说,你需要每小时按时运行 5 个不同的脚本。你可以为此,在 crontab 中创建 5 个不同的条目 -或者- 您可以利用run-parts
.run-parts
允许您像任何其他条目一样指定 crontab 条目,但“命令”实际上是一个目录。当命令执行时,它将执行给定目录中的每个脚本。
以下是 Linux 系统常见的列表:
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
第一行/etc/cron.hourly
表示每小时一分一秒(01 * * * *
),目录中的所有脚本都/etc/cron.hourly
将被执行。其他行也适用相同的概念。您不受这些时间和目录的限制 - 您可以完全自定义它们以满足您的需求,作为标准的 crontab 条目。
除了使用 按照目录批量处理脚本之外run-parts
,您还可以通过按“用户”将它们分开并通过 将它们放入每个用户的 crontab 中,从而使事情更易于管理crontab -u username -e
。例如,假设您有一些特定于报告的脚本,您可以创建一个“reportRunner”用户并将所有与报告相关的 cron 分配给该用户。这样做,您将很容易进行列表分离,并且可以轻松管理不同类别的脚本/计划(在我看来)。它不会使 cron 的总列表变短,但它应该有助于使您正在查看的任何给定列表更短(并分类)。
答案2
我曾经参加过一些相当可怕的 crontab,而且无法避免。不过,我看到了一些很好的基本规则:
- 创建结构
- 按站点/名称/功能对脚本进行分组
- 注释所有内容——这样,其他人就可以看到发生了什么。
- 按站点分组 cron(如果有很多)例如。
/var/www/site/cron/
-----8<-----
#### Site A ####
#--- tasks ---#
# cleanup sessions (ev. 20mins)
*/20 * * * * /var/www/cron/cleanup.script > /dev/null 2>&1
# Garbage collection (ev. 24 hrs @ 0000)
0 0 * * * /var/www/cron/gcoll.script > /dev/null 2>&1
# De-dupe id's from x table (ev. 18 mins)
*/18 * * * * /var/www/cron/dedupe.script > /dev/null 2>&1
#--- Reporting ---#
# Generate mod reports (ev. 24 hrs @ 0400)
0 4 * * * /var/www/cron/daily_report.script > /dev/null 2>&1
#### /Site A ####