Bash 如何在crontab中委托另一个文件作为crontab?SVN/CVS中的aka Crontab?
也许还有另一个解决办法。我构建了一个web应用程序,需要5-10个cron来保持它的维护和不同的间隔。 我想将crontab签入到版本控制中,以便可以轻松地部署它 到其他服务器 我希望能够在/etc/crontab文件中放一行 这将告诉它查看/myapp/app.crontab文件并处理所有行 在该文件中作为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? 因为在服务器之间部署时,某些
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可能不会注意到文件更改@我如何确保目标文件具有正确的权限,并注意到文件更改?