systemd環境におけるハードウェアクロック調整を自動でやらせる


systemd環境におけるハードウェアクロック調整を自動化しましょう。
それも、cronを使わずに!と言っても、まーcronの方が短くて楽ですね。
なお、今回使用した環境は前回のopenSUSE TumbleweedではなくGentooです。

TL;DR

以下の2ファイルを書きます。

/etc/systemd/system/hwclock.service
[Unit]
Description=hardware clock adjustment if NTP synchronized
Wants=time-sync.target

[Service]
Type=oneshot
User=root
Group=root
StandardOutput=journal
StandardError=journal
ExecStart=/sbin/hwclock --utc --update-drift --systohc --verbose
/etc/systemd/system/hwclock.timer
[Unit]
Description=adjust hardware clock monthly

[Timer]
OnCalendar=monthly

[Install]
WantedBy=timers.target

そしたら# systemctl enable --now hwclock.timerすれば毎月1日に調整してくれます。
マメな人であればその後$ journalctl -u hwclock.serviceでログを確認して、頻度を調整すれば完璧でしょう。

補足

サービスファイルのExecStart行の最後にある--verboseですが、util-linuxのバージョンに依存して--debugじゃないと動かない可能性がありますので、サービスファイルに書く前に一度は手動で実行して出力を確認することをオススメします。Gentooでは7月の2.30.2から2.32.4へのアップデートでverboseにしないとログを吐いてくれなくなったために一回分記録がパーになりました。

ログは実際どんな感じになる?

手元のサーバでこのタイマーを数ヶ月走らせた結果を貼りたいのですが、何日かお待ちください。