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操作を常に強制終了して中断するため、何があっても空のテキストファイルがあります。
何か助けはありますか?