我的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分钟运行一次时,这会大量失败。 当然,随着新的脚本添加不同的时间,情况会变得更糟。
有没有更好的办法?
编辑
更好的意思是让它更易于pipe理,拥有一个大型的crontab是不可pipe理的,但是在任何地方都没有脚本。
不一定是一个GUI。
让crontab更易于pipe理,这是我多次梦寐以求的。 但是,如果你需要20个脚本来安排运行 – 那么你需要20个脚本来运行。
至less对我来说,主要的问题一直是在/etc/crontab (或在用户的crontab -e )创build一个新的条目。 特别是当这些新条目设置为与现有条目同时运行(甚至是条目列表 )时。
比如说,你需要5个不同的脚本来每小时运行一小时。 您可以在crontab中为此创build5个不同的条目 – 或者 – 您可以利用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指出,每小时1分钟( 01 * * * * ),位于/etc/cron.hourly目录中的所有脚本将被执行。 同样的概念也适用于其他线路。 你并不局限于这些时间和目录 – 你可以完全自定义它们来满足你的需要,作为一个标准的crontab条目。
除了带有run-parts的目录的批处理脚本以外,通过“用户”将它们分开,并通过crontab -u username -e将它们放入每个用户的crontab中,可以使事情更易于pipe理。 比方说,您有一些特定于报告的脚本,您可以创build一个“reportRunner”用户并将所有与报告相关的cron分配给该用户。 这样做,你会很容易地将列表分离,并且很容易pipe理不同类别的脚本/时间表(在我看来)。 它不会使cron的总列表变短,但它应该有助于使您所查看的列表变短(并进行分类)。
我已经参加了一些相当恐怖的crontabs,并没有得到解决。 不过,我已经看到了一些很好的基本规则:
/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 ####