普通の誤家庭には4台のNTP ST1があると思いますが、起動方法をチューンしてみました。
日本では停電はめったにないのですが、4台もあると手動で立ち上げるのが面倒なので、GPS,JJYのセンテンスをmrubyでパースしてdateコマンドで時間を設定後にntpdを起動するようにしました。
watchdogでリブートした場合も同じです。
ところがこの方法だと300msとか大きなオフセットがついてntpdが起動することがあり、そうすると通常運転に戻るのにかなりな時間がかかってしまいます。
停電の場合は仕方ないとしてもwatchdogの場合は、他のST1は動いているので、それを使ってあわせたほうがオフセットが小さくなります。
スクリプトはこうしてみました。
#!/bin/sh
RS=`sysctl -n dev.mtk_wdog.0.rststat`
if [ ${RS} == 0 ]; then
DATE=`/root/gettime.rb`
date ${DATE}
else
ntpdate -b 10.0.1.18
fi
ntpd -p /var/run/ntpd.pid
万が一ntpdateで指定したST1が落ちてるといけないので安定しているST2で合わせています。
rebootで起動した場合はこのスクリプト自体を実行せずntpdを上げないようにしています。これはntpdが上がってしまうとメモリのフラグメントが大きくなってリモートでのflashの更新(reupgrade)ができなくなるためです。
reupgrade後はrebootで上がってくるので、上がったところでwatchdogコマンドを実行して抜けると、wetchdogでresetしてntpdが起動します。
8:19にwatchdogでrebootしたグラフです。想定どうりの動きです。
なかなか合わないケースもありました。
ntpd -xで起動するようにしてみました。
この日は16:50:01から18:10:43まで雷害回避による停波していたのですが、なぜかその後に調整が急になっています。


