書式
dsh [-m マシン名 | -a | -g グループ名] [-r リモートシェル名] [-c | -w | -i | -F forklimit ] -- コマンドライン説明
dsh は複数のマシンで同時にコマンドを実行するためのユーティリティーです. このユーティリティーはBourneシェルで表現すると for a in $(seq 1 10); do rsh $a command; done と同等の事ができます.
オプション
利用可能なオプションは以下の通りです- --verbose | -v
- 冗長な出力を出します.
- --quiet | -q
- 出力を静かにします.
- --machine | -m [マシン名[,マシン名]*]
-
マシン名 をコマンドが実行されるマシンの一覧に追加します. マシン名
の形式は ユーザ名@マシン名 という形をとります.この形式を利用すると
ユーザ名 でリモートホストにログインできます.
バージョン 0.21.4 から ユーザ名@マシン名,ユーザ名@マシン名,ユーザ名@マシン名 の形式で複数のホストをコンマ区切りで指定することができるようになりました.
- --all | -a
-
Add all machines found in /etc/dsh/machines.list
にある全ホストを指定したコマンドを実行するホストの一覧に追加します.
- --group groupname | -g groupname
-
/etc/dsh/group/グループ名
にある全ホストを指定したコマンドを実行するホストの一覧に追加します.
グループ名が @ネットグループ の形式で指定されているのなら,指定されたネットグループを コマンドを実行するためのホストの一覧に追加します.
- --file マシンファイル | -f マシンファイル
-
指定したファイルにある全ホストを指定したコマンドを実行するホストの一覧に追加します.
ファイルの中では一行に一台づつマシンを指定します( machinename と同じ書式で指定します)。 "#"で開始する行は無視されます。
バージョン 0.21.4 から同じマシンを複数回指定すると, 一つの実行にマージされるようになりました.
- --remoteshell シェル名 | -r シェル名
-
シェル名 というリモートシェルを利用する. 通常 "rsh" や "remsh" や "ssh"
が利用可能です.
- --remoteshellopt リモートシェルオプション | -o リモートシェルオプション
-
リモートシェルオプション
をリモートシェルに与えるオプションのリストに追加する.
- --help | -h
-
ヘルプメッセージを出力して終了する.
- --wait-shell | -w
-
各マシンで実行し,実行し終ってから次のマシンで実行する.
- --concurrent-shell | -c
-
シェルを並列に実行する.
- --show-machine-names | -M
-
マシン名を標準出力の出力に追加する. --concurrent-shell
オプションと同時に使うと出力が多少は見やすくなる.
- --hide-machine-names | -H
-
マシン名を標準出力の出力に追加しない.
- --duplicate-input | -i
-
dshプロセスの入力を各リモートプロセスに分配する. --concurrent-shell
オプションを指定している必要がある.
現在の実装の制限により,シェルを実行する以外の用途には訳に立たない. シェルのセッションを終了するには,CtrlーDを押すこと.
- --bufsize | -b [バッファサイズ(バイト)]
-
--duplicate-input の入力を複製する際に利用するバッファサイズを指定する.
- --version | -V
-
バージョン情報を出力して終了する.
- --num-topology | -N
-
トポロジを1から変更する.
1がデフォルトの1ノードから全ノードにシェルを実行するスタイルです.
2以上の値に指定すると,dshが他のマシンでも実行されるようになります.
- --forklimit | -F fork limit
-
-c と同様の効果を持つ. このオプションは同時接続の数に制限を設ける.
限界を越えた場合,新しい接続を作成する前に他の接続が終了するのを待つ.
同時にアクセスするホストの数が200を越えており, -N
オプションを利用することが好ましくない環境の場合に利用する.
終了コード
最初のゼロ以外の終了コードを返した子プロセスの終了コードを返します. もし全てのプロセスがゼロを終了コードとして返したのなら,0を返します.コマンドラインオプションの失敗があった場合は,EXIT_FAILUREを返します.
例
- dsh -a w
- 全ワークステーションにログインしているユーザの一覧を表示します.
- dsh -r ssh -a -- w
- sshを利用して,全ワークステーションにログインしているユーザの一覧を表示します. (sshを利用するときには,ssh-agentを利用するのが良いでしょう.)
- dsh -r ssh -m node1 -m node2 -c -- 'echo $HOSTNAME $(cat/proc/loadavg )'
- node1とnode2の負荷平均を表示します.
ファイル
- /etc/dsh/machines.list | $(HOME)/.dsh/machines.list
- -a コマンドラインオプションが指定されたときに利用するマシンの一覧.
- /etc/dsh/group/groupname | $(HOME)/.dsh/group/groupname
- -g グループ名 オプションが指定されたときに利用するマシンの一覧
- /etc/dsh/dsh.conf | $(HOME)/.dsh/dsh.conf
- 毎日使うデフォルト設定の書いてあるファイル.
バグ
ファイルをコピーするための dcp プログラムがあるべきだろう.設定ファイルももっと柔軟になるべきだ.