Я пытаюсь написать сценарий оболочки, который проверяет, созданы ли 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, потому что у меня есть большой список машин и не могу позволить себе взаимодействовать с каждым всплывающим окном. Таким образом, решение заключалось в том, чтобы сохранить идентификатор процесса в «proc_id», используя $ !. Но я читал, что $! эффективен только с процессами, вызываемыми в фоновом режиме. И здесь возникает проблема, когда я вызываю vncviewer в фоновом режиме и перенаправляю stderr & stdout в файл, кажется, что он действительно записывает файл, когда он закончен/закрыт, но не убит. Итак, теперь у меня есть пустой текстовый файл, несмотря ни на что, поскольку я всегда прерываю операцию vncviewer, убивая его, прежде чем записывать в выходной файл, который я использую для принятия решения.
Любая помощь?