问候,
我正在尝试找出操作系统/BIOS 时钟所运行的时区。
问题是,如果 TZ 缺失或为空,我怀疑日期和 ls 会恢复为 TZ=UTC。
但是,如果 TZ=America/Los_Angeles 或 America/Chicago,那么我知道本地时区设置为何。
但是我如何知道 Linux 操作系统运行的时区? cron 和其他守护进程以什么为基础确定时区?
-丹尼尔
答案1
它基于 的内容/etc/localtime
,来自 中的一个文件/usr/share/zoneinfo
,可以使用tzselect
或进行更改system-config-date
。
答案2
只是补充一下已经说过的内容,hwclock
将根据 BIOS 告诉您日期。
BIOS 日期和系统日期可能会不同步。对于 TZ,通常将 BIOS 时间设置为 UTC,并让系统日期调整其 TZ,但有些人更喜欢将 BIOS 时间设置为当地时间。
答案3
我正在尝试找出操作系统/BIOS 时钟运行的时区。问题是,如果 TZ 缺失或为空,我怀疑日期和 ls 会恢复为 TZ=UTC。
不,这是不正确的。date、ls 以及几乎所有其他软件在未设置 TZ 时不会恢复为 UTC,它们会使用默认时区。在 Linux 上,默认时区设置在文件中/etc/localtime
。查看该文件没有什么意义,因为它是二进制文件tzfile
格式。它要么是符号链接,要么是 下某个文件的副本/usr/share/zoneinfo
;这些是不同时区的规则。
但是我如何知道 Linux 操作系统所运行的时区?
如果/etc/localtime
是符号链接,只需查看它指向的位置。如果是文件,最好使用发行版的工具来查找。在 Debian 下,使用
dpkg-reconfigure tzdata
(只需立即按“取消”即可不进行任何更改)。
在 RedHat 上,它是redhat-config-date
或system-config-date
。
cron 和其他守护进程根据什么确定其时区?
大多数守护进程只是使用系统默认时区。
不幸的是,Cron 是一个特殊情况:有几种实现,它们以不同的方式处理时区。“Vixie cron”是 Linux 上常见的 cron,它始终使用默认时区。一些 cron(例如在 BSD 上)允许您在 crontab 中切换时区。这是否是一种改进还有待商榷...