3

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

谢谢!

4

3 回答 3

3

这是cron(8)手册页所说的(这是针对 Vixie cron 的;其他实现可能会有不同的行为):

当时钟改变少于 3 小时时,例如在夏令时的开始和结束时,需要特别注意。如果时间向前移动,那些在被跳过的时间内运行的作业将在更改后立即运行。反之,如果时间倒退不到 3 小时,那些落入重复时间的作业将不会重新运行。

只有在特定时间运行的作业(未指定为 @hourly,也未在小时或分钟说明符中使用“*”)受到影响。使用通配符指定的作业会立即根据新时间运行。

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

于 2011-12-30T20:37:06.183 回答
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 类似的功能。

于 2011-12-30T18:12:33.893 回答
0

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

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

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

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

于 2011-12-30T20:07:30.347 回答