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
とすればどんなに時刻がずれていても同期してくれるので、正直こんな物はいらない… 🐘