cron 文件是否有一个良好的布局约定?

cron 文件是否有一个良好的布局约定?

我目前面临的一个 cron 文件包含十几个不同的应用程序的任务——有些只有一个,有些有很多。我正在尝试找出一种组织和记录这些过程的好方法。有没有什么惯例可以模仿,还是我只能自己想办法?

答案1

#minute hour    mday    month   wday    who     command

## Acme Anvil Application
# clear logs every 5 minutes
*/5     *       *       *       *       root    /path/to/clear_logs
# monthly maintenance
30      5       1       *       *       root    /path/to/acme/maintenance

## Fabricam
# adjust timing
*/30    0-5     *       *       *       fab    /path/to/bin/fab_time

## Etc...

答案2

如果您的系统支持 /etc/cron.d,您也可以尝试将 cron 作业分解为单独的文件,并按应用程序分组。

root@linuxbox:/etc/cron.d# ls
sa-update  sysstat  vnstat

请注意,/etc/cron.d 中的 cron 作业格式略有不同,因为您需要将运行命令的用户放在时间字段和命令本身之间,例如,

root@linuxbox:/etc/cron.d# cat sa-update
### OPTIONAL: Spamassassin Rules Updates ###
#
# http://wiki.apache.org/spamassassin/RuleUpdates
# Highly recommended that you read the documentation before using this.
# ENABLE UPDATES AT YOUR OWN RISK.
#
# /var/log/sa-update.log contains a history log of sa-update runs

10 4 * * * root /usr/share/spamassassin/sa-update.cron 2>&1 | tee -a /var/log/sa-update.log

答案3

我建议确保在 /etc/crontab 文件末尾添加注释。如果文件中的最后一个作业未以换行符结尾,则许多 cron 实现都不会触发该文件中的最后一个作业。

Debian Lenny 就是其中之一。

答案4

好问题。以下几点让我受益匪浅:

0)标题注释

添加有用的评论,这将有助于您编写条目,并减少作业无法按预期进行的机会。

##------------------------------------------------------------
## (-) Characters to escape: %, $
## (-) Logs (on Linux) are located under /var/spool/mail/ (postfix needs to be installed)
##
## Min  Hour Day  Mon  Weekday
## *    *    *    *    *  command to be executed
## ┬    ┬    ┬    ┬    ┬
## │    │    │    │    └─  Weekday  (0=Sun .. 6=Sat)
## │    │    │    └──────  Month    (1..12)
## │    │    └───────────  Day      (1..31)
## │    └────────────────  Hour     (0..23)
## └─────────────────────  Minute   (0..59)
##
##------------------------------------------------------------

1)订单

按一天中的时间对条目进行排序(早上在顶部,晚上在底部)

  • 原因:更容易找到您想要调整的条目。

2)路径

  1. 在文件顶部明确设置 PATH

    • 理由:避免“没有这样的文件或目录”错误(特别是如果您需要 GNU 版本的工具而不是 Mac 内置版本!)
SHELL=/bin/zsh
PATH=/Volumes/apps/homebrew/Cellar/findutils/4.9.0/libexec/gnubin/:/Volumes/apps/homebrew/Cellar/coreutils/9.1/libexec/gnubin/:/Volumes/apps/homebrew/Cellar/findutils/4.9.0/libexec/gnubin/:/opt/local/bin/:

3)限制 sh /path/to/script.sh

除非真的需要,否则不要调用脚本(最好直接在 crontab 文件中调用原语)

  • 理由:你可以快速找到负责特定行为的条目

4)备份 crontab

添加以下条目(在 root 的 crontab 中执行相同操作):

@weekly   crontab -l > ~/crontab.`whoami`.`date -I`.txt
  • 原因:无论何时重新安装操作系统,您都无法轻松重建 crontab。

5)| tee /tmp/cron_*log

将每个条目的输出写入 ramdisk 上的日志文件;

| tee /tmp/cron_*.log
| tee /tmp/cron_*.err.log

理由:

  • 更容易找到 cron 中的错误(例如tail /tmp/cron_*.err.log
  • 垃圾日志文件不会超出其使用寿命
  • 无需使用内置的 /var/mail/messages,因为它会变得臃肿

6)cron 表达式后的 tab

  • 理由:一些 cron 表达式会比其他表达式更长,因此在同一字符列中启动所有命令会看起来更整洁(并帮助您比较不同的命令)
6  12 * * 5     echo "hello"
10 12 * * 1-5   echo "world"

其他

  • 每年从一个空白的 crontab 开始(以便定期清除垃圾)

相关内容