我正在尝试使用优秀的CronEdit gem在Ruby中为Crontab编写Web前端。我浏览了Dillon Cron的crontab源代码,发现它更新了一个特定的文件,以便守护进程在下一次扫描时刷新cron列表。
在VixieCron的man crontab中,它说:
另外,cron每分钟检查一下它的假脱机目录的modtime (或/ etc / crontab上的modtime)已更改,如果有,则cron将更改 检查所有crontabs上的modtime并重新加载那些已经改变的那些。 因此,无论何时修改crontab文件,都不需要重新启动cron。注意 crontab(1)命令每当更新假脱机目录的modtime时 更改crontab。
是否有任何平台(Ubuntu,Red Hat,ArchLinux,Mac OS X)独立的方式来确保在手动编辑Cron文件之后,守护进程会不会刷新它?
答案 0 :(得分:4)
不,没有。如果你知道它是VixieCron,那么更新目录的时间戳。否则,你可能会伪装它:在调用EDITOR
之前设置env变量crontab -e
(这应该会调出crontab的编辑器)。
这个想法是将编辑器设置为一些进行更改的程序。 crontab -e
将等待编辑器终止并重新读取该文件并告诉cron某些内容已发生变化。
但是,如果你有旧版本的cron,你仍然必须重新启动它。但我怀疑你能在运行Linux或Mac OS X的任何东西上找到这样的古老版本。
答案 1 :(得分:3)
Sane现代Linux发行版有/etc/cron.d/
目录,您可以将crontab条目作为单独的文件放入。如果我没记错的话,新的cronfile会在写入后2分钟内被读取
答案 2 :(得分:2)
非常感谢gnibbler和Aaron。我刚刚浏览了Ruby的'whatever'和'cronedit'宝石的源代码。它们都有一个'crontab - ',它用更新的cron条目替换现有的cron文件。这意味着与我原来的问题相反,这些库使用了标准的crontab工具,而该工具又可以完成刷新守护进程所需的任何细节。
我认为最好的平台无关和cron(dillon,vixie,mcron等)不可知的刷新守护进程的方法是始终使用相关的crontab实用程序。即使以编程方式进行编辑,用户程序也必须将新的cron文件传递给crontab实用程序,该实用程序将执行该特定平台/ cron所需的任何操作。
@Mark,谢谢你的评论。但是,我正在尝试提供一个简单的Web前端,用户可以通过www进行自定义,就像直接编辑crontab文件一样。
非常感谢您的回复!
答案 3 :(得分:0)
如果这很重要,为什么不使用不同的杠杆呢?换句话说,有两种选择:
crontab 1:/ do / some / very / specific / thing具有我需要更改的特定参数等。
crontab 2:/ do / what / needs / to / be / done
在#2中,作业负责在运行时确定需要完成和执行的操作。通过这种设计,需要了解crontab如何在某个详细级别上工作的概念是无关紧要的。