【发布时间】:2021-12-16 13:38:51
【问题描述】:
我有一个 crontab 在 UTC 时间运行的 Ubuntu 服务器上安排许多事情。一些正在运行的脚本相对于它们为其提供功能的 Web 应用程序而言是时间敏感的。
例如每天下午 4 点必须更新一些内容,因为最终用户会在他们的时钟上看到它。
在英国采用 GMT 的冬季,这不是问题,但从 4 月到 10 月,英国夏令时 (BST) 的时钟会提前一小时。然后,服务器上运行的脚本会在用户看来是下午 5 点(而不是下午 4 点)更新 Web 应用程序。
有没有办法为这个时区变化有条件地调整 crontab 的计划时间?
下面的意图是在每个月的第一天 00:00 运行。在 BST 期间,我的理解是这将在夏令时期间的 01:00 BST 运行:
# m h dom mon dow user command
0 0 1 * * root cd / && run-parts --report /etc/cron.monthly
我有哪些选项可以确保在 GMT 和 BST 期间始终在 00:00 运行?
服务器时区信息
$ timedatectl
Local time: Mon 2021-11-01 22:57:41 UTC
Universal time: Mon 2021-11-01 22:57:41 UTC
RTC time: Mon 2021-11-01 22:57:41
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: n/a
RTC in local TZ: no
【问题讨论】:
-
无论如何,TYPICAL 情况是服务器在 LOCAL 时间运行,因此所有 crontab 作业将在预期时间自动运行,无论是“标准”时间还是“日光”时间。操作系统管理偏移量,而不是 crontab。但你的是一个“特例”。我喜欢 Cyrus 的解决方法below。你可能需要做一些小的调整,但基本的想法是合理的:)
-
@paulsm4 我一直致力于建议最好将数据库保持在 UTC 中,并假设将其扩展到操作系统本身以避免时区变得复杂和不可预测。我们在构建 Web 应用程序时考虑了本地时间,并根据最终用户的需要将它们转换为其他时区。然而,在基础级别,我们知道,该层之外的所有内容都被标准化为全面的 UTC。