Raspberry Pi2にはRTCがありませんが、これによって再起動したときに時刻が 2017年1月1日 とかになります。

システム時刻が現在時刻とかけ離れている場合、ラズパイを再起動した後はしばらく上記の古い時刻で動いています。 そこで、再起動する直前の時刻時刻をファイルに書き出しておき、再起動後にセットすることで1分程度の差に抑えることができないか試してみました。

https://github.com/dozen/myrtc

Raspberry Pi2にはArchlinuxを入れているので、systemdで使えるようにしました。

設定方法

myrtc/usr/local/myrtc/ に置いて、 myrtc.service/etc/systemd/system/ に置きます。

/usr/local/myrtc/myrtc store で現在時刻をファイルに保存し、 /usr/local/myrtc/myrtc restore でファイルに書き出した時刻をシステム時刻にセットします。

restore にはroot権限が必要です。

myrtc.service はonshotタイプのサービスで、start時にrestoreコマンドを実行し、stop時にstoreコマンドを実行することで、起動時にrestore、シャットダウン時にstoreを実行できるようにしています。

感想

再起動にかかる時間は考慮されていないので、myrtcでセットし直した時刻は、私のRaspberry Pi2でだいたい30秒くらい遅れます。storeかrestoreどちらかでその間に進む時刻を大体で加算すればもっと誤差が小さくなりそうですが、NTPで同期できればそれでいいので、ややこしいことはしていません。

もし不慮のシャットダウンなども考慮したい場合は、cronでmyrtc storeを定期的に実行するか、 myrtcコマンドを書き換えて無限ループの中でスリープを挟みながら時刻をファイルに書き出し続ける、みたいにすればいい感じになりそうです。

もし後者のmyrtcを書き換えるパターンを実践する場合は、 myrtc.service を書き換える必要がありますね。

tinker panic 0とすればどんなに時刻がずれていても同期してくれるので、正直こんな物はいらない… 🐘