複数のサーバに「ps」を送信し、テキストファイルとして出力

複数のサーバに「ps」を送信し、テキストファイルとして出力

66個のRedhatボックスにあるすべての死んだプロセスをテキストファイルに出力するスクリプトを作成しようとしています。私は1つのボックスでこれを行う原則を理解していますが、プロセスは1つのボックスで実行されますが、複数のボックスにクエリを実行する方法がわかりません。

だから私は次のような小さなスクリプトを見つけました:

for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done

ps -ef | grep "defunct"基本的にコミットで実行できることを知っていますが$command、私が生成したすべての出力ファイルは実行中のホストから削除されるようです。

あるボックスでこのプログラムを実行し、そのボックスに出力を保存する必要がありますが、他の65ボックスの情報も一緒に保存する必要がありますか?

私たちはパスワードのないSSHを持っていると思います。 Unixに関する知識は中程度で、SASを使用しているので少し知っています。

ベストアンサー1

リダイレクトはリモートコンピュータではなく呼び出し側コンピュータで発生するため、結果ファイルはローカルになります。また、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

while read -r host; do
    ssh "$host" ps -ef 
done <hosts.txt | grep "defunct" >output.txt

おすすめ記事