Runbook: config reload が完了しない / hang する¶
HLD-only
config reload の標準フロー (stop services → load config_db → start services) に基づく運用ノート。
実行前提
config reload -y は全 SONiC container を再起動するため転送断が発生する。in-service の機器では warm-reboot か事前 traffic drain を行う。途中で Ctrl-C すると中途半端な状態になりやすく、復旧には reboot が必要になることがある。
症状¶
config reload -yを実行後、Stopping ... swss等で 10 分以上停止- systemd 側の
swss.service/bgp.serviceがactivating (start)のまま - container は止まったが、新しい設定で起動してこない
切り分けフロー¶
flowchart TD
A[reload が止まる] --> B{どの段階で止まるか}
B -- stop --> C[container が SIGTERM で死なない]
B -- start --> D[systemd dependency wait]
B -- post-start --> E[orchagent が初期 sync で詰まる]
C --> F[docker ps / docker logs 確認]
D --> G[systemctl list-jobs / journalctl -u]
E --> H[swss-orchagent-busy-loop.md]
確認コマンド¶
# 進行中の systemd job
systemctl list-jobs
sudo journalctl -u swss -n 200 --no-pager
sudo journalctl -u bgp -n 200 --no-pager
# Container 状態
docker ps -a | head
docker logs swss 2>&1 | tail -100
# Redis の reload 痕跡
sonic-db-cli CONFIG_DB dbsize
sonic-db-cli APPL_DB dbsize
sonic-db-cli ASIC_DB dbsize
# Feature の依存関係
show feature status
# /etc/sonic/config_db.json の妥当性
python3 -c "import json; json.load(open('/etc/sonic/config_db.json'))" && echo OK
sudo sonic-cfggen -j /etc/sonic/config_db.json --print-data > /dev/null && echo "cfggen OK"
よくある原因¶
config_db.jsonの構文エラー / 必須 key 欠落 —sonic-cfggenが無限 retry に近い動きをする- 依存関係のあるサービスが停止しきれない —
databasecontainer が PID 1 待ちで残る bgp.serviceが FRR の old socket を握ったまま —/var/run/frr/*.pidの残骸- orchagent の初期 sync 中に ASIC エラー —
swss-orchagent-busy-loop.md参照 - gNMI / telemetry container の graceful stop timeout — 既定 10 秒だが応答せず 5 分待ち
- NTP 未同期で証明書時刻が未来 — gnmi/telemetry が起動失敗
対処¶
- まず
config_db.jsonを json として parse できるか確認 systemctl statusで hanging service を特定し、systemctl reset-failed後systemctl restart <unit>- それでも詰まる場合は
sudo reboot(fast-reboot ではなく完全 reboot) - backup から
cp /etc/sonic/config_db.json.bak.* /etc/sonic/config_db.jsonで巻き戻し
config reload の実装は sonic-utilities の config/main.py にあり、stop services → load config_db → start services の各段で待ち合わせる1。
関連 reference / topics¶
- swss-orchagent-busy-loop.md
- warm-reboot-failure.md
- config-db-persistence-failure.md
- minigraph-reload-stuck.md
-
sonic-net/sonic-utilitiesのconfig/main.pyにおけるreloadコマンド実装。停止と起動の各サブステップが順次 systemd を叩くため、いずれか 1 つでも応答しなければ全体が hang する。 ↩