也许是另一个解决方案。我建立了一个网络应用程序,需要5-10个crons来保持它和各种间隔。 我想将crontab签入到版本控制中,以便可以轻松部署 到其他服务器。
我希望能够在/ etc / crontab文件中添加一行 这将告诉它查看/myapp/app.crontab文件并处理所有行 在该文件中作为crontab条目...即:
0 1 * * * root /bin/sh /do/something.sh
为什么不直接签入/ etc / crontab? 因为从服务器部署到服务器时,某些服务器可能会有所不同 在他们的crontabs中我不想干涉的条目。
有什么想法吗? 在rev ctrl中存储一堆crontab条目的其他人做了什么? 感谢。
答案 0 :(得分:4)
将您的crontab文件放在/etc/cron.d/中 - 作为签出文件或符号链接到签出文件。
答案 1 :(得分:1)
我们正在研究的项目对这个问题采取了一种截然不同的方法。
我们有一个名为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
然后只是在命令行时间间隔内读取并运行给定时间间隔所需的任务。
答案 2 :(得分:0)
只需在crontab中添加一个(或极少数)条目,并将该条目作为调用其他条目的修订控制脚本:
0 * * * * /path/to/app/hourly.sh 0 0 * * * /path/to/app/daily.sh 0 1 * * 5 /path/to/app/weekly.sh
hourly.sh然后会调用所有需要在一小时内完成的事情,每天.sh会调用每天需要完成的所有事情,等等。
我发现在为单个应用程序管理大量cron作业时,最好不要将作业全部悬挂在crontab中,因为这会鼓励您忽略它们之间的依赖关系,即一个任务运行于超过一小时的14分钟取决于在小时过后12分钟运行的任务,但每隔一段时间该任务需要2.1分钟才能完成,而另一个脚本失败,给你一个海森堡。
另一种方法是编写自己的守护进程来管理这些任务。
答案 3 :(得分:0)
我这样做的方法是将我的crontab文件放在源代码管理中,然后在我的部署脚本中,将crontab文件替换为正在部署的内容。
你可以这样做:
crontab filename
或者对于特定用户(必须具有超级用户访问权限):
crontab -u my_web_user filename
一个重要警告,它假设每个用户只有一个crontab条目,并且它存储在SCM中。如果其他人编辑了服务器上的crontab,那么下次部署时这些编辑将会丢失。所以要注意这一点。