KVM VPS重啟後hwclock時間發生變化
hwclock就是硬體時間, 類似於物理機上的BIOS time. 這個時間是可以和作業系統的時間不一樣的. 如果有一項service強烈依賴時間, 那麼就可能會導致該service出錯, 本文介紹Ubuntu下面的解決方法.
hwclock時間通常可以使用以下命令來檢視
hwclock -r#檢視hwclock時間 hwclock -w --systohc#將作業系統時間寫入hwclock時間
1, 安裝htpdate(非必需步驟)
此項非必需. 僅僅是因為我的CloudCone vps遮蔽了ntp使用的UDP 123埠, 我才需要這一步, 對於大多數KVM VPS來說, 這一項是不必要的.
$ apt-get install htpdate $ systemctl status htpdate.service#此時應該是預設進入執行狀態且系統時間已經同步正確了 $ grep -v ^# /etc/default/htpdate#檢視其配置 HTP_SERVERS="www.pool.ntp.org www.ntp.br www.wikipedia.org" HTP_OPTIONS="-D -s"
2, 編寫systemd服務
$ vim /etc/systemd/system/hwclock-sync.service#寫入如下內容 [Unit] Description=update hwclock time After=network-online.target htpdate.service Wants=network-online.target htpdate.service [Service] Type=onshot ExecStart=/sbin/hwclock -w --systohc RemainAfterExit=yes [Install] WantedBy=multi-user.target
提示:
Type=onshot表示該服務是一條一次性命令, 執行完以後就會退出
RemainAfterExit表示退出後仍視為該服務會執行狀態, 通常這倆個選項會搭配使用
systemctl daemon-reload systemctl enable hwclock-sync.service
3, 啟動順序的優化
比如某v2ray.service依賴時間, 我們可以修改一下這個service. After和Wants選項之後均加上hwclock-sync.service即可:
vim /etc/systemd/system/v2ray.service [Unit] Description=V2Ray Service After=network.target hwclock-sync.service Wants=network.target hwclock-sync.service [Service] Type=simple PIDFile=/var/run/v2ray.pid ExecStart=/usr/bin/v2ray/v2ray -config /etc/v2ray/config.json Restart=on-failure [Install] WantedBy=multi-user.target