Не удается прочитать выходные данные процесса, вызванного в фоновом режиме
Я пытаюсь написать сценарий оболочки, который проверяет, созданы ли 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, убивая его, прежде чем он записывает в выходной файл, который я использую для принятия решения.
Любая помощь?
1 ответ
Вероятно, результат будет:
std.err
Ты можешь попробовать:
eval vncviewer $machine:149 > /tmp/${machine}_vnc_status.txt 2>&1 &