66個のRedHatボックスにまたがるすべての無効なプロセスを1つのテキストファイルに出力するスクリプトを作成しようとしています。これを1つのボックスで実行する原則は理解していますが、そのプロセスを1つのボックスで実行されるものに靴べらにする方法はわかりませんが、複数のボックスにクエリを実行します。
だから、私はこの小さなスクリプトを見つけました:
for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done
基本的にps -ef | grep "defunct"
$command
として 、しかし、私が作成した出力ファイルはすべて、それが実行されているホストにドロップされると思います。
これを1つのボックスから実行し、その1つのボックスに出力を保存する必要がありますが、他の65のボックスの情報は含まれていますか?
パスワードなしのsshが用意されていると思います。私のUnixの知識は中級レベルですが、SASを使用しているので少しは知っています。
承認された回答:
リダイレクトはリモートマシンではなく呼び出し側マシンで行われるため、結果ファイルはローカルになります。また、grep
リモートで実行する必要はありません:
while read -r host; do
ssh "$host" ps -ef | grep "defunct" >"output.$host"
done <hosts.txt
これはps -ef
を実行します 各ホストとgrep
defunct
を抽出します 出力の行。 grep
リモートではなく、ローカルで実行されます。同様に、結果ファイルはローカルで作成されます。
単一の出力ファイルが必要な場合:
while read -r host; do
ssh "$host" ps -ef | grep "defunct"
done <hosts.txt >output.txt
または(grep
の1回の呼び出しの場合 )
while read -r host; do
ssh "$host" ps -ef
done <hosts.txt | grep "defunct" >output.txt