背景 : こんにちは。現在、古い Linux SBC システムを使用しています。古くて機能が制限されていたBusyBox v1.00-rc2を使用しています。(いいえ、アップグレードはオプションではありません)。この SBC には複数のセンサーが接続されており、値とタイムスタンプが記録されています。
問題 : 数年後、RTC が実際の時間からずれ、一部の SBC が実際の時間から 1 時間以上 (遅く) 遅れます。
ntp サーバーで単純に ntpdate を実行することはできません。時間のジャンプが発生し、データ監視ログに大きなギャップが生じるためです。受け入れられません。
解決策: 次のような bash スクリプトを作成しました。
- SBC および ntp サーバーで ntp オフセットを確認します。
- 次に、オフセットを変数に記録します
- たとえば、オフセット値が 7 より大きい場合 (60 秒のオフセット)、スクリプトはdate -sコマンドを使用して、システム クロックを少しずつ増やします。
- 1時間ごとに最大60秒しか増加しません
- 例 :
- SBC 時間は 2016 年 4 月 4 日 14:59:00 です
- ntp サーバーからの実際の時間は 15:00:00 2016 年 4 月 4 日です。
- ntpdate -q -4 utcnist2.colorado.eduを使用する と、 60 秒のオフセットで返されます
- したがって、私のスクリプトは450 秒ごとに 7 秒しか増加しません
- このロジックにより、SBC 時間は2016 年 4 月 4 日 16:04:17頃に ntp 時間に追いつきます。
- 問題は、このスクリプトが時間を段階的にゆっくりと調整することですが、時々、それがうまくいかず、SBC 時間が実際の時間 ( Ntp時間) と比較して速くなり、これがデータ損失の原因となります (サーバーは失敗します)。 SBC 時間がサーバー時間より速い場合は受け入れます)。
質問:
- これに似た増分時間ジャンプを行う他の方法はありますか?
- ntpdate には時間の増分更新を行う -B 関数があることに気付きましたが、SBC ではこれを使用できませんでした。このスイッチを使用する正しい方法は何ですか? または、機能を誤解していましたか?
- adjtimex はこの目的を達成できますか?
- 必要な場合は、ここに私の完全な bash スクリプトを示します (ここに貼り付けるには長すぎます)。
http://pasted.co/65beb3db [パスワード: 123456]