有效管理 crontab

有效管理 crontab

我的 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,而且无法避免。不过,我看到了一些很好的基本规则:

  1. 创建结构
  2. 按站点/名称/功能对脚本进行分组
  3. 注释所有内容——这样,其他人就可以看到发生了什么。
  4. 按站点分组 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 ####

相关内容