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

Любая помощь?

ответ

1

Вероятно, выход будет:

std.err

Вы можете попробовать:

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

 Смежные вопросы

  • Нет связанных вопросов^_^