GNU/Linux >> Linux の 問題 >  >> Linux

複数のサーバー間で「ps」を送信し、出力を1つのテキストファイルに送信しますか?

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

Linux
  1. Stdoutに出力し、同時にGrepをファイルに出力しますか?

  2. Sedを使用してテキストファイルから複数のランダム行を削除する方法は?

  3. grep でテキスト ファイルの空行を削除する

  1. 1 つのテキスト ファイルを複数の *.txt ファイルに分割する方法は?

  2. コマンド出力を複数の引数として別のコマンドに渡す方法

  3. 複数のファイルを1つのgzファイルにgzipする方法は?

  1. 複数の UNIX コマンドを 1 つの出力に結合する

  2. 複数のサーバー間でのユーザー アカウントの同期

  3. ssh を介して複数のマシンでログ ファイルを追跡する