cron守护进程有多精确?

cron作业调度程序是否真的很精确?

我的意思是,我需要一个脚本每天晚上运行最新的可能,但在第二天00:00之前。

我理想的是在23.59(或11:59 pm)运行一个cron工作,但是系统会非常精确吗? 由于第二个问题很重要,我是否应该把cron工作设置为23:58来留下一些时间?

cron可以保证的是,你的工作将在指定的时间内开始(取决于系统时钟的精确度)。 但是没有办法给你任何关于终止工作的保证。 这取决于很多因素:

  • 系统如何加载
  • 这项工作是做什么的
  • 由于硬件问题导致速度变慢
  • networking问题造成的缓慢(假设工作取决于networking)

我的build议是改变你的devise,使一个具体的完成时间不是一个要求。

我想这取决于你的cron守护进程,但文档和标准指出,如果你指定分钟,作业将在指定的分钟执行。

看到:

  • crontab文档
  • crontab上的SUSv2和crontab文件格式

请注意,当时钟滴答到正确的时间时,您的脚本将会启动,但之后会结束一段时间。

通常cron会在23:59:00开始,扫描所有的crontab文件,过滤出23:59相关的那些文件,然后启动它们。 扫描这个文件是非常快的,因为它们不是很多,他们都只包括几行。 所以通常,cronjobs从23:59:00或23:59:01开始。有一定的方法可以有意地减缓这个过程。 (例如,将数百万行添加到crontab中)。 如果系统完全超载,这也不会那么快。

而且,这显然是依赖于实现的。

如果你需要非常准确的开始时间,你最好创build一个程序,直到你想要的时间,然后运行(例如,使用C ++ 11 )。 但是在非实时操作系统上,这也不是确切的! 而个人电脑的时钟也不知道确切的时间!

在所有情况下,这只能确保程序 (或多或less)你想要的时间开始 。 我们不能保证程序在特定的时间内成功结束 ,所以我坚信你应该改变这个要求。

这取决于您的整体脚本执行时间和服务器时间的精确度。

 59 23 * * * /some/script/file.sh 

将在23:59 正确启动您的脚本,但是,如果您有一些长时间运行的命令,则可能会在午夜之后执行一部分脚本。