やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

ラズパイ3で起動時に自動で時刻同期がどうやってもできなかった

積年の悲願、達せず。

問題

起動時に自動で時刻の同期をさせたいが、できない。

以前から面倒に思っていたので本格的に調査してみた。が、できなかった。orz

参考

Raspberry Piでプログラムを自動起動する5種類の方法を比較・解説

希望の光。5つも方法があればどれか1つくらい当たるんじゃね? と思っていた時期が私にもありました。

できること

手動ならできる。問題は自動化できないこと。

sudo ntpdate -u ntp.jst.mfeed.ad.jp
  • 上記コマンドをターミナル起動して実行する
  • 上記コマンドを~/.bash_profileに記述し、ターミナル起動して、bash -lを実行する

できなかった自動化

以下、すべての方法がダメだった。起動しても時刻同期されない。なぜだ……

1. /etc/rc.localに以下を追記。exit 0より上に書くべき。

sudo ntpdate -u ntp.jst.mfeed.ad.jp

2. $ crontab -eで以下を追記

@reboot sudo ntpdate -u ntp.jst.mfeed.ad.jp

3. ~/.config/lxsession/LXDE-pi/autostartを以下のようにセット。

@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash
@point-rpi
@/usr/bin/sudo /usr/sbin/ntpdate -u ntp.jst.mfeed.ad.jp

なお、sudo, ntpdateのパスはwhichコマンドで調べた。

ほかにも、autostartと名のつくものが複数あったのでやってみた。

~/.config/autostart/autostart.desktop

[Desktop Entry]
Type=application
Name=autostart.desktop
Terminal=true
Exec=/usr/bin/sudo /usr/sbin/ntpdate -u ntp.jst.mfeed.ad.jp
X-KeepTerminal=true

~/.config/openbox/autostart

sudo ntpdate -u ntp.jst.mfeed.ad.jp &
bash /home/pi/root/script/sh/settime.sh &
bash /home/pi/root/script/sh/mkdir_work.sh &

~/など省略できないらしいのでフルパスで書く。

4. /etc/systemd/system/ntpdate.service

raspbian jessieからは /etc/init.dでなくsystemdを使うことが推奨されている。

# http://hendigi.karaage.xyz/2016/11/auto-boot/
[Unit]
Description=startup, settime, ntpdate
After=syslog.target

[Service]
Type=simple
#WorkingDirectory=/tmp/
ExecStart=/bin/bash /home/pi/root/script/sh/settime.sh
#TimeoutStopSec=5
StandardOutput=null

[Install]
WantedBy = multi-user.target

5. /etc/ntp.conf

https://iotdiyclub.net/raspberry-pi-introduction-step-5/

以下のようにroot権限で起動し、/etc/ntp.confファイルを任意のテキストエディタで開く。

$ sudo pcmanfm /etc/

server ...コメントアウトし、pool ntp.nict.jp iburstを追記。

#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
pool ntp.nict.jp iburst
$ sudo service ntp restart
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-b3.nict.go. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp-a2.nict.go. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp-b2.nict.go. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp-a3.nict.go. .INIT.          16 u    -   64    0    0.000    0.000   0.000
 ntp-a3.nict.go. .INIT.          16 -    -   64    0    0.000    0.000   0.000
 ntp-a2.nict.go. .INIT.          16 -    -   64    0    0.000    0.000   0.000

成功していたらサーバ名の前に*がつくらしい。(*ntp-b2.nict.go.等)

記号 意味
* 参照同期中のNTPサーバ
+ クロック誤り検査に合格したNTPサーバ
サーバを参照していない

つまり失敗してる。なぜ?

上記コマンドに続けて、以下をやってみる。

https://qiita.com/msrks/items/d6f7fa721399db4fe8d9

2018-02-20 09:30頃に実行した。時刻はdate -s "2018/02/20 00:00:00"などでわざとずらして00:54:22になってる。

$ sudo ntpdate -v ntp.nict.jp
20 Feb 00:54:22 ntpdate[18827]: ntpdate 4.2.6p5@1.2349-o Mon Jul 25 22:35:35 UTC 2016 (1)
20 Feb 00:54:22 ntpdate[18827]: the NTP socket is in use, exiting
$ date
$ sudo timedatectl set-timezone Asia/Tokyo
$ date

設定されない。わからん。

6. timedatectl

http://luozengbin.github.io/blog/2015-06-27-%5B%E3%81%BE%E3%81%A8%E3%82%81%5Dlinux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.html

NTP synchronized:yesにならない……。

$ sudo timedatectl set-ntp true
pi@raspberrypi:~$ timedatectl status
      Local time: 火 2018-02-20 10:06:41 JST
  Universal time: 火 2018-02-20 01:06:41 UTC
        RTC time: n/a
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

未実施

https://qiita.com/ngkazu/items/916f476985fa3e3f2951

ntp を削除して chrony とやらを使うらしい。自動化については書いていないので解決にならないか。

所感

時刻同期を自動化できなかった。

どうもraspbianのバージョンごとに方法が違うらしい。ネットの情報どおりに動作するとは限らない。

もしや知らないうちに環境を何か変えてしまったか?

もう疲れた。