我的雇主位于欧洲 (CET),因此我们使用夏令时,这需要每年两次前后移动一个小时。我们的服务器在不同位置的云中运行。设置所有基础设施的员工不在了。他决定在所有服务器(目前是 Ubuntu 18.04、20.04 和 22.04)上使用 UTC 作为系统时区。
这并不理想,因为您必须在日志文件中看到的每个日期都在心理上增加 1/2 小时,具体取决于一年中的时间(夏季 +2 小时,冬季 +1 小时)。一些 cronjobs 的时间也需要每年调整两次,因为任务应该在 CET 中午运行。
是否有充分的理由(仍然)使用 UTC 作为系统的时区?或者我应该改用 CET,以便我的 cronjobs 和日志文件更好地与挂钟保持一致?
是的,一点没错!考虑 2023 年 10 月 29 日 02:30 发生的一件大事。日志消息已正式生成。(这个日期/时间的相关性是整个欧洲的时钟在那天早上倒退一小时,而对于 CEST/CET 切换是在那天早上 3 点。)
如果您运行的是 UTC,则时间戳是明确的*。您可能需要转换为 CEST/CET,但您肯定知道绝对时间。另一方面,如果您在当地时间跑步,您首先需要尝试确定这是从 02:00 到 03:00 期间的第一次还是第二次。根据日志消息的数量,这可能是不可能的。
Cron 作业曾经是一个问题,但按照另一个答案
CRON_TZ
中的建议使用或迁移到计时器单元将巧妙地解决这个问题。systemd
* 除了偶尔出现的闰秒,也就是akostadinov提到的
我真的能理解您阅读日志的痛苦,但我不想在每年大约 2 周的时间里与我的美国和德国同事讨论日志文件中的时间,夏令时影响了一个大陆,但没有影响另一个大陆¹。就个人而言,虽然这肯定与主要在本地使用的服务无关(例如打印服务器——不像亚利桑那州的人会在我的德国南部打印机上打印),但我在邮件服务器日志中发现了很多除了 UTC 时间戳之外的任何东西令人困惑。
关于您的 cron 作业:我正在慢慢尝试让自己摆脱良好的 ole crontab,转而使用 systemd 计时器单元。他们有一个
OnCalendar=
字段,需要一个时区规范!所以,你仍然可以说,嘿,太棒了,在柏林早上 7:00,启动 RFC 2324 传输,或其他什么。总而言之,是的,对于服务器,请保持 UTC。但是,老实说,我认为这里的一致性比“Müller 的行政美感”更重要。如果您的其他管理范围/相邻团队和用户期望 CET,那么一定要:去 CET。事情应该有效。
¹我可能是一个异常值。我的机械手表也是 UTC 时间。
服务器应始终存储 UTC。本地时间是只有人类需要看到的表现层问题。如果您作为用户想要查看一些带时间戳的数据,那么您可能希望在您的时区中查看它,这与服务器认为它是什么无关。
UTC 对每个人来说都是明确的(包括闰日/秒),并且永远不会与任何夏令时重叠(特殊情况除外)。
当地时间可以(并且确实)每 6 个月重叠一次,因此如果您正在查看使用当地时间作为时间戳的日志,三月似乎会缺少那个时间,而十月会有两次那个时间。
您看到了 UTC 的缺点(很难在心理上转换为本地时间)。您看不到 UTC 的优势,或者更确切地说没有问题:让每个服务器都同意时间是非常非常有价值的。如果您将服务器更改为某个当地时间,您会很快发现。
将您的服务器保持在 UTC。您可能会考虑创建一些工具来帮助您检查日志。例如,这样的工具可能会以当地时间显示日期。或者及时将日志分组在一起。或者用“id1”、“id2”等替换 32 字节不可读的 id,这样您就知道哪些日志行属于同一操作。或者删除 1000 条几乎相同的日志行。