Debian 13 において ntpsec プロセスの動作に問題があり、起動中にプロセスが消失する問題が発生していた。
背景
環境は Debian 13。NTP デーモンとして ntpsec を採用している。ある時点から、起動中に ntpd のプロセスが存在せず、時刻同期が停止していることに気付いた。
監視(プロセス数の可視化)でも断続的にゼロが観測され、実体としても起動していないケースが確認された。
目的
- なぜ起動中に ntpd が不在になるのかを特定する
- 再発を抑止し、再起動後も安定して起動する状態に戻す
- 現象の知見を残し、同様環境での初動を短縮する
事象
journalctl から、起動時に次のエラーが繰り返し出力されていた。
statistics directory /var/log/ntpsec/ does not exist or is unwriteable, error No such file or directory
Stopped ntpsec.service - Network Time Service.
Stopped ntpsec.service - Network Time Service.
この後に ntpd のプロセスが存在しない状態となる。
環境
- OS: Debian 13 (trixie)
- パッケージ: ntpsec 1.2.3
- 設定: /etc/ntpsec/ntp.conf はデフォルトに準拠。statsdir や statistics はいずれもコメントアウト(統計出力は無効)
調査過程
- サービス状態と PID の有無を確認。再発時は active でなく、MainPID も空であることを確認。
- kernel/journald を含む直近ログを走査し、OOM や segfault は出ていないことを確認。
- 競合確認。systemd-timesyncd や chrony は無効化済みで、123/udp を占有する他プロセスも無し。
- 設定ファイルを精査。/etc/ntpsec/ntp.conf に追加 include は無く、statsdir と statistics はコメントアウト(無効)。
- それでも ntpd は /var/log/ntpsec の不在を理由に終了しているため、ディレクトリの存在要件が実質的に働いていると判断。
原因仮説と検証
- 仮説A: Debian 13 の ntpsec 1.2.3 における回帰または挙動変更により、統計無効でも起動時に /var/log/ntpsec の存在をチェックしている。
- 仮説B: 設定は無効でも、サービス初期化のどこかで統計ディレクトリを参照し、存在しない場合にエラー扱いで停止している。
対処として、/var/log/ntpsec を作成し所有権とパーミッションを適切に設定したところ、以後は起動中のプロセス消失がなくなった。
対処(今回の運用方針)
統計出力は無効のままにしつつ、/var/log/ntpsec のみ作成した。パーミッションは 750。
sudo install -d -o ntpsec -g ntpsec -m 750 /var/log/ntpsec
この状態でも、統計が無効であればディレクトリには何も出力されない(空のまま)。
比較検討(Debian 12 との違い)
- Debian 12 では、デフォルト設定が同様に統計無効であり、/var/log/ntpsec 不在が致命にならず、サービスは通常通り起動していた。
- 今回の事象は Debian 13 でのみ再現。バージョン依存の挙動差である可能性が高い。
恒久策の選択肢
- 手動作成を継続(本件ではこれを採用)。
- systemd の override で LogsDirectory=ntpsec を指定し、自動生成を保証する(将来の再発防止重視の場合)。
運用上のメモ
- 監視(プロセス数)でゼロを検出したら、まずは systemctl status と journalctl を確認し、/var/log/ntpsec の存在と所有権を点検する。
- 統計出力を有効化する場合は、statsdir の有効化とディレクトリの権限整備をセットで行う。
採取したコマンド群
journalctl -u ntpsec --since "2 days ago" -g 'fatal|error|segfault|killed|Stopped|Restarting|PANIC'
journalctl -k --since "2 days ago" -g 'oom|Out of memory|audit'
systemctl is-active ntpsec.service
systemctl show ntpsec.service -p MainPID
ss -ulpn | grep ':123 '
cat /etc/ntpsec/ntp.conf
journalctl -k --since "2 days ago" -g 'oom|Out of memory|audit'
systemctl is-active ntpsec.service
systemctl show ntpsec.service -p MainPID
ss -ulpn | grep ':123 '
cat /etc/ntpsec/ntp.conf
結論
- Debian 13 の ntpsec 1.2.3 環境で、統計無効設定にもかかわらず、/var/log/ntpsec 不在がプロセス消失の直接原因となっていた。
- /var/log/ntpsec を所有権 ntpsec:ntpsec、パーミッション 750 で作成することで安定化した。
- 統計が無効であるため、ディレクトリには実際の出力は行われていない。