0

vncservers が作成されているかどうかを確認するシェル スクリプトを作成しようとしています。アイデアは、「vncviewer MACHINE_NAME」を実行することであり、テキスト出力に基づいて、サーバーが作成されているかどうかを判断できます(基本的に「不可能」を探します)

linuxMachineList="grd-ies-rh6-03"
for machine in $linuxMachineList
do
    echo "Pinging $machine..."
    echo -n '' > /tmp/${machine}_vnc_status.txt
    eval vncviewer $machine:149 &> /tmp/${machine}_vnc_status.txt&
    proc_id=$!
    kill -9 $proc_id
    grep -i unable /tmp/${machine}_vnc_status.txt > /dev/null
    if [ $? == 0 ]
    then
        echo "Error: $machine does not respond"
    else
        echo "$machine is OK!"
    fi
done

問題は、vncviewer がポップアップ ウィンドウを呼び出すため、vncviewer プロセスを自動的に強制終了する必要があることです。マシンのリストが大きく、各ポップアップ ウィンドウを操作する余裕がないためです。したがって、解決策は、$! を使用してプロセス ID を「proc_id」に保存することでした。しかし、私はその$を読みました!バックグラウンドで呼び出されるプロセスでのみ有効です。バックグラウンドで vncviewer を呼び出して stderr&stdout をファイルにリダイレクトすると、ファイルが終了/クローズされたが強制終了されていないときに実際にファイルに書き込むように見えます。したがって、決定を下すために使用する出力ファイルに書き込む前に、vncviewer操作を常に強制終了して中断するため、何があっても空のテキストファイルがあります。

何か助けはありますか?

4

1 に答える 1

1

おそらく、出力は次のようになります。

std.err

あなたが試すことができます:

eval vncviewer $machine:149 > /tmp/${machine}_vnc_status.txt 2>&1 &

于 2013-07-12T09:56:39.067 に答える