我很少有使用 CentOS 7 和 6 作为操作系统的服务器。以前,夏令时的时间每年更改两次,操作系统会在每台服务器上自动执行此操作。
现在突然通过了一项改变夏令时政策的法律。我想确保在这些服务器上禁用 DST,以便操作系统不会像以前那样更改时间。我希望这些更改基于我们的中央时间服务器发生。
在 CentOS 7 上,我可以验证此命令未激活 DST:timedatectl status
输出:DST active: no
但我无法在 CentOS 6 上安全地确认 DST 已停用。我到处搜索,但找不到显示此内容的命令或文件。那么如何检查 DST 在 CentOS 6 中是否处于非活动状态?
首先,您必须确定当前时区设置是什么。如果
TZ
设置了环境变量,那就是时区;但如果未设置,则系统默认时区由/etc/localtime
.如果
/etc/localtime
是 的符号链接/usr/share/zoneinfo/...
,则确定当前时区很容易:链接目标路径名将准确识别实际时区。但在 RHEL/CentOS 6 中,该
/etc/localtime
文件很可能是来自 的时区文件之一的实际副本/usr/share/zoneinfo/...
,而不是链接。还有一点小问题:/etc/sysconfig/clock
很可能会告诉您在 OS 安装时选择了什么作为默认时区,但如果后来通过覆盖/etc/localtime
另一个时区文件来更改时区/usr/share/zoneinfo/
,则信息/etc/sysconfig/clock
可能不再是最新的。因此,如果在安装 OS 后时区可能已更改的可能性很小,您应该将
/etc/localtime
文件的内容与其(假定的)原始内容进行比较/usr/share/zoneinfo
:一旦您知道正确的时区名称,您可以使用以下命令查看该时区已知历史和预期未来中的任何 DST(和其他)转换事件:
由于此列表每年可能包括两个 DST 转换(四行),一直到 2499 年左右,您可能希望稍微限制该列表。例如:
据此,America/New_York 时区最近一次从 EST 过渡到 EDT 是在 3 月 13 日,下一次过渡将在 11 月 6 日回到 EST。
如果所选时区的 DST 处于非活动状态,则这些 DST 转换描述将不存在。
还有一个挑剔:在任何类 Unix 系统上,操作系统的内部时钟始终以 UTC 运行,并且所有操作系统内部时间计算都使用与 UTC 等效的 Unix 时间戳处理。当本地时区发生 DST 转换时,系统不会“更改时钟”,而只是更改本地时间和 UTC 时间之间的转换偏移量。
在 Linux 系统上,可以选择让电池支持的硬件时钟在本地时间运行,以便在双启动方案中与 Microsoft 操作系统兼容。如果您使用该选项,硬件时钟将在 DST 转换时进行相应调整。但是,如果您将 RTC 保持在 UTC 时间(这通常是面向服务器的 Linux 发行版中的默认设置),那么由于 DST,永远不需要实际的时钟调整。只需适当更改转换系数即可。