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