代码之家  ›  专栏  ›  技术社区  ›  timh

如何在crontab中委托以使用另一个文件作为crontab?又称SVN/CVS中的crontab?

  •  3
  • timh  · 技术社区  · 17 年前

    也许还有另一个解决办法。我构建了一个Web应用程序,它需要5-10个crons来保持它的维护和各种间隔。 我想将crontab签入到版本控制中,以便轻松部署它。 到其他服务器。

    我想在/etc/crontab文件中放一行 这样它就可以查看/myapp/app.crontab文件并处理所有行。 在那个文件中作为crontab条目…IE:

    0 1 * * *    root   /bin/sh /do/something.sh
    

    为什么不直接签入/etc/crontab? 因为在从服务器部署到服务器时,某些服务器可能具有不同的 我不想干扰他们的crontabs中的条目。

    有什么想法吗? 其他人在rev ctrl中存储一堆crontab条目做什么?
    谢谢。

    4 回复  |  直到 17 年前
        1
  •  4
  •   Anders Westrup    17 年前

    将crontab文件放入/etc/cron.d/-作为签出文件或指向签出文件的符号链接。

        2
  •  1
  •   cowgod    17 年前

    在我正在进行的项目中,我们对这个问题采取了非常不同的方法。

    我们有一个名为 crontab.pl 所有服务器都会调用crontab。这样做意味着crontab在连续的应用程序部署和 克朗塔布 脚本可以与其他应用程序源文件一起愉快地活在源代码管理中。

    我们可以使用命令行参数为该脚本指定不同的时间间隔。crontab如下所示:

    */5 * * * * /usr/local/apache/crontab.pl 5    > /var/log/crontab.log 2>&1 # 5 minute interval
    1   * * * * /usr/local/apache/crontab.pl 60   > /var/log/crontab.log 2>&1 # 1 hour interval
    1   1 * * * /usr/local/apache/crontab.pl 3600 > /var/log/crontab.log 2>&1 # 1 day interval
    

    然后,只需读取命令行时间间隔并运行给定间隔所需的任务即可。

        3
  •  0
  •   skiphoppy    17 年前

    只需在crontab中添加一个(或极少数)条目,并让该条目成为一个可调用其他项的修订控制脚本:

    0****/path/to/app/hourly.sh时 0 0***/path/to/app/daily.sh页 0 1**5/path/to/app/weekly.sh

    然后,hourly.sh会将所有需要完成的工作称为hourl,daily.sh会将所有需要完成的工作称为daily,等等。

    我发现,在为单个应用程序管理大量cron作业时,最好不要让作业在crontab中全部挂起,因为这会鼓励您忽略它们之间的依赖关系,即,一个在一小时后14分钟运行的任务取决于一个在一小时后12分钟运行的任务,但每秒钟o通常,该任务需要2.1分钟才能完成,而另一个脚本却失败了,这给了您一个heisenbug。

    另一种方法是编写自己的守护进程来管理这些任务。

        4
  •  0
  •   Luke Francl    17 年前

    我这样做的方法是将crontab文件放入源代码管理,然后在部署脚本中,将crontab文件替换为正在部署的文件。

    你可以这样做:

    crontab filename

    或者对于特定用户(必须具有超级用户访问权限):

    crontab -u my_web_user filename

    一 大告诫 这是因为它假定每个用户只有一个crontab条目,并且它存储在SCM中。如果其他人在服务器上编辑crontab,那么这些编辑将在下次部署时丢失。所以要注意这一点。

    推荐文章