Ntp
CentOS 7 - timedatectl 如何在沒有 NTP 的情況下同步時間和日期?
我正在為類似 rsync 的實用程序創建自動化測試,並且我需要能夠將時鐘設置為 24 小時以進行其中一項測試。但是,當我使用 timedatectl 設置時間和日期時,它們會在 15 秒後恢復到目前時間。
檢查 timedatectl 狀態我發現它沒有執行 NTP:
# timedatectl status Local time: Wed 2019-05-15 23:24:17 EDT Universal time: Thu 2019-05-16 03:24:17 UTC RTC time: Wed 2019-01-16 02:13:40 Time zone: America/New_York (EDT, -0400) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: yes Last DST change: DST began at Sun 2019-03-10 01:59:59 EST Sun 2019-03-10 03:00:00 EDT Next DST change: DST ends (the clock jumps one hour backwards) at Sun 2019-11-03 01:59:59 EDT Sun 2019-11-03 01:00:00 EST
我還檢查了 NTPD 沒有執行,並且沒有任何東西綁定到埠 123。
timedatectl 是否有另一種同步時間的方法?CentOS 7 測試機在 VirtualBox 映像下的 Docker 容器中執行,因此 Internet 連接受到一定限制。我還在 VirtualBox 上直接在 CentOS 上進行測試,所以我也需要解決非 Docker 的情況。
VBox Guest Additions 預設包含並啟用與主機的時間同步。
您可以使用以下命令禁用此功能:
vboxmanage setextradata <vmname> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" "1"
或者將以下行添加到 yourVM.vbox 文件
<ExtraDataItem name="VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" value="1"/>
timedatectl 在特定頻率後由 systemd 呼叫,它檢查 /etc/adjtime、/usr/share/zoneinfo/、/etc/localtime 和許多其他文件以檢查是否有任何資訊可用,它有自己的邏輯來調整時鐘而不使用ntp。
static int context_write_data_timezone(Context *c) { _cleanup_free_ char *p = NULL; int r = 0; assert(c); if (isempty(c->zone)) { if (unlink("/etc/localtime") < 0 && errno != ENOENT) r = -errno; return r; } p = strappend("../usr/share/zoneinfo/", c->zone); if (!p) return log_oom(); r = symlink_atomic(p, "/etc/localtime"); if (r < 0) return r; return 0;
}