以编程方式编辑crontab并强制守护进程刷新

我正在尝试使用优秀的CronEdit gem在Ruby中为Crontab编写Web前端。 我浏览了Dillon Cron的crontab源代码,发现它更新了一个特定的文件,以便守护进程在下一次扫描时刷新cron列表。

在VixieCron的man crontab中,它说:

另外,cron检查每一分钟以查看其假脱机目录的modtime(或/ etc / crontab上的modtime)是否已更改,如果有,cron将检查所有crontabs上的modtime并重新加载已更改的那些。 因此,无论何时修改crontab文件,都不需要重新启动cron。 请注意,只要crontab(1)命令更改了crontab,它就会更新假脱机目录的modtime。

有没有任何平台(Ubuntu,Red Hat,ArchLinux,Mac OS X)独立的方式来确保在手动编辑Cron文件之后守护进程刷新它没有失败?

不,没有。 如果你知道它是VixieCron,那么更新目录的时间戳。 否则,您可以伪造它:在调用crontab -e之前设置env变量EDITOR (它应该为crontab创建一个编辑器)。

我们的想法是将编辑器设置为一些进行更改的程序。 crontab -e将等待编辑器终止并重新读取文件并告诉cron某些内容已发生变化。

但是,如果您有旧版本的cron,则必须重新启动它。 但我怀疑你能在运行Linux或Mac OS X的任何东西上找到这样的古老版本。

Sane现代Linux发行版有/etc/cron.d/目录,您可以将crontab条目作为单独的文件。 如果我没记错的话,新的cronfile会在写入的2分钟内被读取

非常感谢gnibbler和Aaron。 我刚刚浏览了Ruby的’whatever’和’cronedit’gem的源代码。 它们都有一个’crontab – ‘,它用更新的cron条目替换现有的cron文件。 这意味着与我原来的问题相反,这些库使用标准的crontab工具,而后者又可以执行刷新守护进程所需的任何细节。

我认为最好的平台无关和cron(dillon,vixie,mcron等)不可知的刷新守护进程的方法是始终使用相关的crontab实用程序。 即使以编程方式进行编辑,用户程序也必须将新的cron文件传递给crontab实用程序,该实用程序将执行该特定平台/ cron所需的任何操作。

@Mark,谢谢你的评论。 但是,我正在尝试提供一个简单的Web前端,用户可以通过www进行自定义,就像直接编辑crontab文件一样。

非常感谢您的回复!

如果这很重要,为什么不使用不同的杠杆呢? 换句话说,有两种选择:

crontab 1:/ do / some / very / specific /具有我需要更改的特定参数等。

crontab 2:/ do / what / needs / to / be / done

在#2中,作业负责在运行时确定需要完成和执行的操作。 通过这种设计,需要了解crontab如何在某个详细级别上工作的概念是无关紧要的。