Armadilloフォーラム

コンテナからホストOSへの時刻同期について

kn_kobayashi

2023年9月22日 13時15分

お世話になっております。

コンテナからホストOSのハードクロックへの同期は、いつ行われるのでしょうか。
コンテナ内のメインプロセスが起動するより前に確実に行われるという保証はありますでしょうか。

コンテナ内の開発したメインプロセス(C言語にて開発)にて、起動直後に
「clock_gettime(CLOCK_REALTIME, &ts);」
を呼んでいますが、この時刻が同期できていない時刻(1990年等)になっている可能性はありますでしょうか。
containerのconfファイルにて本アプリを起動するようにしております。

よろしくお願いします。

コメント

at_dominique.m…

2023年9月22日 13時35分

kn_kobayashiさん

> コンテナからホストOSのハードクロックへの同期は、いつ行われるのでしょうか。

ネットワークを取得した際にホスト側で chronyd が時間を取得してクロックを同期します。

> コンテナ内のメインプロセスが起動するより前に確実に行われるという保証はありますでしょうか。

コンテナの起動はネットワークを待っていませんので、そういう保証はないです。
クロックを jump しないように、「clock_gettime(CLOCK_MONOTONIC, &ts)」を使ってください。

> コンテナ内の開発したメインプロセス(C言語にて開発)にて、起動直後に
> 「clock_gettime(CLOCK_REALTIME, &ts);」
> を呼んでいますが、この時刻が同期できていない時刻(1990年等)になっている可能性はありますでしょうか。

RTC の電池を設置している場合にその可能性が低いと考えていますが、購入状態か電池がなければ電源が数十秒切れた場合に 1990 に戻る可能性があります。
どうしても正しい時間を取得したい場合は、時間があきらかに過去の場合(ビルド時間より早い等)に待つようにした方がいいです。
定期的に時間を取得するか、英語になっていますがこのリンクに説明されている方法が効率いいです: https://stackoverflow.com/a/58561767/2332808

お手数ですが、よろしくお願いします。