show services サブコマンド¶
概要¶
show services は 稼働中の SONiC docker コンテナ全てに対して ps aux を一括実行して結果を結合表示するデバッグ用コマンド。各 docker サービスの中で動いているプロセスツリーをまとめて見られる1。
シグネチャ¶
引数・オプションなし。--verbose も無い。
動作¶
実装は次の通り1。
@cli.command('services')
def services():
"""Show all daemon services"""
cmd = ["sudo", "docker", "ps", "--format", '{{.Names}}']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
while True:
line = proc.stdout.readline()
if line != '':
print(line.rstrip() + '\t' + "docker")
print("---------------------------")
cmd0 = ["sudo", "docker", "exec", line.rstrip(), "ps", "aux"]
cmd1 = ["sed", '$d']
_, stdout = getstatusoutput_noshell_pipe(cmd0, cmd1)
print(stdout)
else:
break
挙動:
sudo docker ps --format '{{.Names}}'で 起動中の全コンテナ名を列挙。- 各コンテナ名について以下を出力:
<container>\tdockerのヘッダ行---------------------------の区切りsudo docker exec <container> ps aux | sed '$d'の結果(末尾 1 行をsed '$d'で落とす)
sed '$d' で末尾行を捨てるのは、docker exec 経由の ps aux が出力末尾に空行や ps 自身のプロセス行を出すための整形目的。
注意点¶
- コンテナが大量にあるシャーシ系・multi-ASIC では出力が非常に長くなる。スクロールしたくない場合は
show services | lessを推奨。 - pager は内部で付かないため、デフォルトはそのまま stdout に流れる。
docker psで見える「停止中のコンテナ」は含まれない。停止中サービスの状態を見るにはshow feature statusやsystemctl statusを使う。
CONFIG_DB との接点¶
なし(docker daemon の API のみ)。
データフロー (手動作成)¶
flowchart LR
CLI["show services"]
DK["docker ps + docker exec ps aux"]
CN["各 SONiC コンテナ<br/>(swss / syncd / bgp / 等)"]
CLI --> DK
DK --> CN
凡例
show 系 (CLI → docker → 各コンテナ) のミニ図。CONFIG_DB を直接介さないコマンドのため手動で記述。
関連リファレンス¶
- CLI: show feature / show system-health / show techsupport
- YANG: sonic-feature
- CONFIG_DB: FEATURE
- Topic: リブート / アップグレード
引用元¶
関連 CLI コマンド¶
config banner— config banner サブコマンドconfig clock— config clock サブコマンドconfig kdump— config kdump サブコマンドconfig ntp— config ntp サブコマンドconfig platform firmware— config platform firmware サブコマンド
-
servicesコマンドはshow/main.pyL2252-L2267。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/show/main.py#L2252 ↩↩