Raspberry Pi 4 Model B 8GB(Revision:d03114)にNTPサーバーから取得した時刻を任意のタイミングで定期的に強制同期させて時刻合わせを行った。

読み飛ばしてしまえ!あまり意味のない前書き!!

 ラズパイの時刻合わせはGPSの電波で行う方法もあります。他に頑張れば電波時計や地上デジタル放送の時刻とも同期が可能かもしれません。
 それはさて置き、諸事情でおさしみくんは任意のタイミングで時刻合わせを行いたくなりました。毎時29分毎に同期ができればいいな♪
 時刻合わせ取得方法はNTPサーバーです。定期的で強制的に合わせるのが目的です。NTPサーバーも任意とします。

時刻合わせを行う前の状況を確認

$ date
2020111日 日曜日 21:57:06 JST

 dateコマンドでラズパイ上の現在時刻を確認。

$ timedatectl
              Local time:2020-11-01 22:07:29 JST
          Universal time:2020-11-01 13:07:29 UTC
                RTC time: n/a
               Time zone: Asia/Tokyo (JST, +0900)
System clock synchronized: yes
             NTP service: active
         RTC in local TZ: no

 timedatectlコマンドでラズパイ上の現在時刻(日本標準時・協定世界時)とタイムゾーン等を確認。
 ハードウェアクロックが存在しないこと、ハードウェアクロックのタイムゾーンの指定がないこと、システムクロックと同期が行われていること、NTPがアクティブであることが読み取れた。

$ systemctl status systemd-timesyncd
Warning: The unit file, source configuration file or drop-ins of systemd-timesyncd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
          └─disable-with-time-daemon.conf
   Active: active (running) since Sun 2020-11-01 20:03:52 JST; 2h 3min ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 319 (systemd-timesyn)
  Status: "Synchronized to time server for the first time 133.243.238.163:123 (2.debian.pool.ntp.org)."
   Tasks: 2 (limit: 4915)
  CGroup: /system.slice/systemd-timesyncd.service
          └─319 /lib/systemd/systemd-timesyncd

1101 20:03:52 raspberrypi4mb8gb systemd[1]: Starting Network Time Synchronization...
1101 20:03:52 raspberrypi4mb8gb systemd[1]: Started Network Time Synchronization.
1101 20:04:41 raspberrypi4mb8gb systemd-timesyncd[319]: Synchronized to time server for the first time 133.243.238.163:123 (2.debian.pool.ntp.org).
$ sudo systemctl daemon-reload

 systemd-timesyncdのステータスを確認すると警告を受けた為、リロード。

$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
          └─disable-with-time-daemon.conf
  Active: active (running) since Sun 2020-11-01 20:03:52 JST; 2h 4min ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 319 (systemd-timesyn)
  Status: "Synchronized to time server for the first time 133.243.238.163:123 (2.debian.pool.ntp.org)."
   Tasks: 2 (limit: 4915)
  CGroup: /system.slice/systemd-timesyncd.service
          └─319 /lib/systemd/systemd-timesyncd

1101 20:03:52 raspberrypi4mb8gb systemd[1]: Starting Network Time Synchronization...
1101 20:03:52 raspberrypi4mb8gb systemd[1]: Started Network Time Synchronization.
1101 20:04:41 raspberrypi4mb8gb systemd-timesyncd[319]: Synchronized to time server for the first time 133.243.238.163:123 (2.debian.pool.ntp.org).

 アクティブで11月1日20時4分41秒に2.debian.pool.ntp.orgのNTPと同期していることを確認。

時刻合わせを行う設定ファイルを確認

$ cd /etc/systemd/
$ ls
journald.conf  logind.conf  network  networkd.conf  resolved.conf  sleep.conf  system  system.conf  timesyncd.conf  user  user.conf

 systemd-timesyncdへ任意のNTPサーバーを指定する為に設定ファイルを探る。timesyncd.confが存在した。

目的を達成するには?『(目的ってなんだよ?)』

$ cat timesyncd.conf
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.
#
# Entries in this file show the compile time defaults.
# You can change settings by editing this file.
# Defaults can be restored by simply deleting this file.
#
# See timesyncd.conf(5) for details.

[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

 timesyncd.confの中身を見てみる。NTPサーバーを任意で指定を行うことができる。しかし、systemd-timesyncdで任意のタイミングでNTPサーバーから取得した時刻を強制的に同期させる方法がわからない。chronyか戻ってntpdで行うか?
 もしかしたらsystemd-timesyncdをrestartすればNTPサーバーと即同期が可能かもしれないと考えたので確認をしたい。それと朝から何も食べていないことに気が付いた。

pi@raspberrypi4mb8gb:~ $ sudo systemctl restart systemd-timesyncd
pi@raspberrypi4mb8gb:~ $ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
          └─disable-with-time-daemon.conf
  Active: active (running) since Sun 2020-11-01 23:09:49 JST; 12s ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 2153 (systemd-timesyn)
  Status: "Synchronized to time server for the first time 129.250.35.250:123 (0.debian.pool.ntp.org)."
   Tasks: 2 (limit: 4915)
  CGroup: /system.slice/systemd-timesyncd.service
          └─2153 /lib/systemd/systemd-timesyncd

1101 23:09:49 raspberrypi4mb8gb systemd[1]: Starting Network Time Synchronization...
1101 23:09:49 raspberrypi4mb8gb systemd[1]: Started Network Time Synchronization.
1101 23:09:54 raspberrypi4mb8gb systemd-timesyncd[2153]: Synchronized to time server for the first time 129.250.35.250:123 (0.debian.pool.ntp.org).

 restart後にNTPサーバーから取得した時刻と同期が可能なことを確認。任意のタイミングで同期を行うのが目的なのでrootのcronに登録する。

systemd-timesyncdはcronで実行可能か?の確認

pi@raspberrypi4mb8gb:~ $ sudo crontab -e
no crontab for root - using an empty one

Select an editor.  To change later, run 'select-editor'.
 1. /bin/nano        <---- easiest
 2. /usr/bin/vim.tiny
 3. /bin/ed

Choose 1-3 [1]: 1
40 * * * * systemctl restart systemd-timesyncd
pi@raspberrypi4mb8gb:~ $ sudo crontab -l
# Edit this file to introduce tasks to be run by cron.
# 
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
# 
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
# 
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
# 
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
# 
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
# 
# For more information see the manual pages of crontab(5) and cron(8)
# 
# m h  dom mon dow   command
40 * * * * systemctl restart systemd-timesyncd

 動作確認として40分毎にsystemd-timesyncdをrestartする設定を登録。

$ systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
          └─disable-with-time-daemon.conf
  Active: active (running) since Sun 2020-11-01 23:40:01 JST; 1min 36s ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 2335 (systemd-timesyn)
  Status: "Synchronized to time server for the first time 133.243.238.243:123 (0.debian.pool.ntp.org)."
   Tasks: 2 (limit: 4915)
  CGroup: /system.slice/systemd-timesyncd.service
          └─2335 /lib/systemd/systemd-timesyncd

1101 23:40:01 raspberrypi4mb8gb systemd[1]: Starting Network Time Synchronization...
1101 23:40:01 raspberrypi4mb8gb systemd[1]: Started Network Time Synchronization.
1101 23:40:01 raspberrypi4mb8gb systemd-timesyncd[2335]: Synchronized to time server for the first time 133.243.238.243:123 (0.debian.pool.ntp.org).

 cronでsystemd-timesyncdのrestartが可能なこと、NTPサーバーと同期が可能なことを確認。1秒。
 強制的に同期させる方法としてcronにsystemctl restart systemd-timesyncdを登録する方法を取る。NTPサーバーも指定する。

timesyncd.confへ任意のNTPサーバーを指定

$ sudo nano /etc/systemd/timesyncd.conf
NTP=ntp.nict.jp
FallbackNTP=ntp.nict.go.jp ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp ntp.ring.gr.jp ntp.ring.gr.jp ntp0.ring.gr.jp ntp1.ring.gr.jp ntp2.ring.gr.jp 0.jp.pool.ntp.org 1.jp.pool.ntp.org 2.jp.pool.ntp.org 3.jp.pool.ntp.org
$ cat /etc/systemd/timesyncd.conf
#  This file is part of systemd.

[Time]
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

NTP=ntp.nict.jp
FallbackNTP=ntp.nict.go.jp ntp1.jst.mfeed.ad.jp ntp2.jst.mfeed.ad.jp ntp3.jst.mfeed.ad.jp ntp.ring.gr.jp ntp.ring.gr.jp ntp0.ring.gr.jp ntp1.ring.gr.jp ntp2.ring.gr.jp 0.jp.pool.ntp.org 1.jp.pool.ntp.org 2.jp.pool.ntp.org 3.jp.pool.ntp.org

 timesyncd.confへ任意のNTPサーバーを記述して指定。

$ sudo systemctl restart systemd-timesyncd
Warning: The unit file, source configuration file or drop-ins of systemd-timesyncd.service changed on disk. Run 'systemctl daemon-reload' to reload units.
$ sudo systemctl daemon-reload
$ sudo systemctl restart systemd-timesyncd

 また警告を受けた。

$ sudo systemctl status systemd-timesyncd
● systemd-timesyncd.service - Network Time Synchronization
  Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
 Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
          └─disable-with-time-daemon.conf
  Active: active (running) since Mon 2020-11-02 20:22:07 JST; 58s ago
    Docs: man:systemd-timesyncd.service(8)
Main PID: 2372 (systemd-timesyn)
  Status: "Synchronized to time server for the first time 133.243.238.164:123 (ntp.nict.jp)."
   Tasks: 2 (limit: 4915)
  CGroup: /system.slice/systemd-timesyncd.service
          └─2372 /lib/systemd/systemd-timesyncd

1102 20:22:07 raspberrypi4mb8gb systemd[1]: Starting Network Time Synchronization...
1102 20:22:07 raspberrypi4mb8gb systemd[1]: Started Network Time Synchronization.
1102 20:22:07 raspberrypi4mb8gb systemd-timesyncd[2372]: Synchronized to time server for the first time 133.243.238.164:123 (ntp.nict.jp).

 ntp.nict.jpで同期が可能なことを確認。cronへ正式にコマンドを登録する。

cronへ本登録

$ sudo crontab -e
29 * * * * systemctl restart systemd-timesyncd
$ sudo crontab -l
# m h  dom mon dow   command
MAILTO=""
29 * * * * systemctl restart systemd-timesyncd
20 3 * * * /sbin/reboot

 毎時29分毎に任意のNTPサーバーから強制的に時刻合わせが可能となった。目的は達成した。

なぜ毎時29分に強制的に時刻を合わせるのか?

 DTVをやりたかったからです。タイマー録画の為です。(26文字)

 この後、カードリーダとチューナーへの電力供給で悩む羽目になるとは思いもしなかったおさしみくんなのでした♪
 Raspberry Pi 4 Model B 8GB(Revision:d03114)らしさが溢れる、数々のワンシーンにちょびっとだけご期待ください。

 記事を閲覧頂き、誠にありがとうございました。

この記事が気に入ったらサポートをしてみませんか?