我的服务器(运行 ubuntu 8.04LTS 服务器)现在将时间报告为 BST 晚上 9:38。BST(英国夏令时)比 UTC(或格林威治标准时间,如果你真的想混淆的话)提前 1 小时
议会法案规定我们在英国使用 BST
这段时间从格林威治标准时间 1 点开始,在 3 月的最后一个星期日早上,到格林威治标准时间 1 点结束,在 10 月的最后一个星期日早上。
在 cron 中安排这个没有问题,但我不知道我应该使用什么日期格式/时区。我是否将其设置为在凌晨 1 点前进但在凌晨 2 点结束时返回?如果机器使用 BST,这是有道理的,但我担心该 cron 不会在凌晨 2 点触发,因为系统时钟可能会在有机会触发之前重置回凌晨 1 点 - 从而使我的脚本延迟 1 小时运行。
还是只使用UTC?
答案在于 cron 源代码(您可以通过 获取
apt-get source cron
),尤其是在 file 的第 159--272 行的主循环中cron.c
。crond
休眠一分钟,然后醒来并查询系统时间,将其与自己的时间概念进行比较(即,如果没有改变时钟,它将是什么时间)。根据实际时间与预期时间的差异,crond
采取不同的行动;其中两个与您的情况相关:时间飞跃超过 5 分钟但不到 3 小时(夏令时开始):cron 运行在实际时间安排的通配符作业,以及在计算时间和实际时间之间的固定时间安排的任何作业。相关来源在第 221--247 行:
时间倒退了不到 3 小时(DST 结束):只需运行通配符作业,跳过已运行的固定计划作业。相关来源在第 247--258 行:
因此,当进入 DST 时,您应该没有问题:您的脚本将运行(在时间跳跃之前或之后立即运行)。
退出 DST 时,如果您将其安排在 1 点钟,您的(固定时间)作业可能会被跳过。我的建议是安排在 1 点前 1 分钟或 2 点(或之后)运行。
UTC=no
您可以尝试yes
在/etc/default/rcS
. 为此,请运行:UTC=no
为UTC=yes
,或UTC=yes
为UTC=no
。保存文件,退出文本编辑器,然后重新启动您的 PC。