Cron Job Scheduler 真的很精确吗?
我的意思是,我需要一个脚本来尽可能晚地运行,但要在第二天的00:00之前运行。
理想情况下,我会在23.59(或晚上11:59)运行cron作业,但是系统真的很精确吗?因为一秒钟很重要,所以我应该将cron作业设置为23:58以便保留一些时间吗?
Cron Job Scheduler 真的很精确吗?
我的意思是,我需要一个脚本来尽可能晚地运行,但要在第二天的00:00之前运行。
理想情况下,我会在23.59(或晚上11:59)运行cron作业,但是系统真的很精确吗?因为一秒钟很重要,所以我应该将cron作业设置为23:58以便保留一些时间吗?
Answers:
cron可以保证的是,您的工作将不早于指定的时间开始(取决于系统时钟的精度)。但是无法为您提供有关工作终止时间的任何保证。这将取决于许多因素:
我的建议是更改您的设计,以使不需要特定的完成时间。
O_CREAT
和O_EXCL
标志,则只要文件位于本地文件系统上,它将是原子的。
我想这取决于您的cron守护程序,但是文档和标准指出,如果您指定分钟,则作业将在指定的分钟执行。
看到:
请注意,您的脚本将在时钟滴答到正确的时间时启动,但会在此后的某个时间结束。
通常,cron将在23:59:00开始,扫描所有crontab文件,过滤出与23:59相关的文件,然后启动它们。扫描此文件的速度非常快,因为它们不多,而且都只包含几行。所以通常情况下,cronjobs开始在23:59:00或23时59分01秒 有一定的方法来此过程中故意放慢。(例如,向crontab添加数百万行)。如果系统完全过载,那么它也不会那么快地工作。
同样,这显然取决于实现。
如果需要非常精确的开始时间,最好创建一个程序,该程序一直休眠直到所需时间,然后再运行(例如,使用c ++ 11)。但是在非实时操作系统上,这也不是很准确!PC的时钟也不知道确切的时间!
在所有情况下,这仅可确保程序在(或多或少)您希望的时间启动。在给定的时间之前无法保证程序成功结束,因此我坚信您应该对此要求进行一些更改。
这取决于您的总体脚本执行时间和服务器时间的精度。
59 23 * * * /some/script/file.sh
会在23:59 完全启动您的脚本,但是,如果您有一些可以长时间使用的命令,则脚本的一部分可能会在午夜之后执行。