Unix 使用ntpd可能会打乱cron作业吗?

Unix 使用ntpd可能会打乱cron作业吗?,unix,cron,ntp,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作业

我的系统有很多时间漂移,几周后它可以提前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作业复制大文件,则第二次运行可能会尝试覆盖第一个作业未完成写入的文件


谢谢

在这个特定的场景中,可能会出现这种情况,但我建议您在备份作业中加入一种锁定机制,它只允许备份作业运行一次:

在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类似的功能。

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

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

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

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

以下是
cron(8)
手册页上的内容(这是针对Vixie cron的;其他实现可能会有不同的行为):

当时钟变化小于3时,需要特别注意 小时数,例如在一天的开始和结束时-轻松节省 时间如果时间向前推移,那些本来可以运行的作业 在中,跳过的时间将在更改后不久运行。 相反,如果时间向后移动少于3小时, 属于重复时间的作业将不会重新运行

仅限在特定时间运行的作业(未指定为@hourly,也未指定为 在小时或分钟说明符中使用“*”)会受到影响。乔布斯 使用通配符指定的将基于新时间运行 马上

超过3小时的时钟变化被视为对 时钟,新的时间立即被使用


因此,答案是“是的,你的情况会发生”,对吗?@BenjaminW。我的理解是OP的情况可能会发生,也可能不会发生。如果cron作业明确指定2:00:00,那么如果ntpd将时钟设置回5秒,则该作业不会重复。但是如果作业指定了通配符(比如每小时运行一次),那么它就会重复。但我只是解释基思引用的文件。