Bash 如何在crontab中委托另一个文件作为crontab?SVN/CVS中的aka Crontab?

Bash 如何在crontab中委托另一个文件作为crontab?SVN/CVS中的aka Crontab?,bash,version-control,cron,crontab,Bash,Version Control,Cron,Crontab,也许还有另一个解决办法。我构建了一个web应用程序,需要5-10个cron来保持它的维护和不同的间隔。 我想将crontab签入到版本控制中,以便可以轻松地部署它 到其他服务器 我希望能够在/etc/crontab文件中放一行 这将告诉它查看/myapp/app.crontab文件并处理所有行 在该文件中作为crontab条目。。。即: 0 1 * * * root /bin/sh /do/something.sh 为什么不签入/etc/crontab? 因为在服务器之间部署时,某些

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

我希望能够在/etc/crontab文件中放一行 这将告诉它查看/myapp/app.crontab文件并处理所有行 在该文件中作为crontab条目。。。即:

0 1 * * *    root   /bin/sh /do/something.sh
为什么不签入/etc/crontab? 因为在服务器之间部署时,某些服务器可能具有不同的 我不想干扰他们crontab中的条目

有什么想法吗? 其他人在rev-ctrl中存储大量crontab条目时做了什么?

谢谢。

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

只需向crontab添加一个(或很少)条目,并使该条目成为一个受修订控制的脚本,该脚本调用其他条目:

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

然后,hourly.sh会调用hour、daily需要完成的所有事情。然后,sh会调用每天需要完成的所有事情,等等

我发现,在为单个应用程序管理大量cron作业时,最好不要将所有作业都挂在crontab中,因为这会鼓励您忽略它们之间的依赖关系,即,一个小时后14分钟运行的任务取决于一个小时后12分钟运行的任务,但有时,该任务需要2.1分钟才能完成,而另一个脚本失败,给您一个海森堡


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

我这样做的方式是将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
crontab文件名

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

crontab-u my\u web\u用户文件名


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

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

我们有一个名为
crontab.pl
的Perl脚本,所有服务器都在其crontab中调用它。这样做意味着crontab在后续的应用程序部署中不必更改,
crontab.pl
脚本可以与其他应用程序源文件一起愉快地生活在源代码管理中

我们可以使用命令行参数为此脚本指定不同的时间间隔。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

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

如果使用符号链接,则需要确保目标文件具有正确的权限,并且cron可能不会注意到文件更改@我如何确保目标文件具有正确的权限,并注意到文件更改?