コンテンツにスキップ

show services サブコマンド

概要

show services稼働中の SONiC docker コンテナ全てに対して ps aux を一括実行して結果を結合表示するデバッグ用コマンド。各 docker サービスの中で動いているプロセスツリーをまとめて見られる1

シグネチャ

show services

引数・オプションなし。--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

挙動:

  1. sudo docker ps --format '{{.Names}}'起動中の全コンテナ名を列挙。
  2. 各コンテナ名について以下を出力:
  3. <container>\tdocker のヘッダ行
  4. --------------------------- の区切り
  5. 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 statussystemctl 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 コマンド