使用ntpd会不会搞乱cron的工作?

时间:2011-12-30 18:05:54

标签: unix cron ntp

我的系统有很多时间漂移,几周后它可以提前约5分钟。

为了解决这个问题,我安装了ntp,它可以帮助修复漂移,当然偶尔会将时间同步到ntp服务器。

假设我有一个类似备份文件的cron作业。以下情况是否可能?

02:00:00 - Cron starts a job
02:00:03 - Ntpd syncs time back 5 seconds to 01:59:58
02:00:00 - 2:00 gets repeated and cron job runs twice

如果cron作业复制大文件,第二次运行可能会尝试覆盖第一个作业未完成写入的文件。

谢谢!

3 个答案:

答案 0 :(得分:2)

这里是cron(8)手册页所说的内容(这适用于Vixie cron;其他实现可能表现不同):

  

当时钟变化小于3时,存在特殊注意事项   小时,例如在白天节省开始和结束时   时间。如果时间已经向前移动,那些本来会运行的工作   在被删除的时间将在更改后立即运行。   相反,如果时间倒退不到3个小时,   那些落入重复时间的工作将不会重新开始。

     

仅限在特定时间运行的作业(未指定为@hourly,也未指定   用' *'在小时或分钟说明符)受影响。工作   使用通配符指定的是基于新时间运行的   立即

     

时钟变化超过3小时被认为是更正   时钟,新时间立即使用。

答案 1 :(得分:1)

在这种特殊情况下,它可能会建议您将一个锁定机制放入备份作业,它只允许它运行一次:

在PERL中,您可以执行以下操作:

flock("/tmp/backup-running", LOCK_EX) || die "I'm already running";

虽然shell可能不会提供类似的机制,除非运行:

touch /tmp/backup-running
if [ -f "/tmp/backup-running" ]
then
    exit 0;
fi

....


/bin/rm /tmp/backup-running

容易出现问题,其他语言为您提供与PERL类似的设施。

答案 2 :(得分:0)

ntp.conf允许您控制ntp连接到时间服务器以进行更正的频率。默认情况下,最小值为64秒(minpoll),maxpoll的默认值为1024秒。见man ntp.conf

因此,如果你在不影响事物的时候手动纠正时间,那么启动ntp,漂移量会很小,非常亚秒变化。

我们的m4000有一个这样的时钟,我们从来没有遇到过问题。

注意:锁定文件的唯一问题是,如果备份严重异常终止,则在重置锁定文件之前不会再运行备份。

相关问题