0

我正在尝试编写一个 shell 脚本来检查是否创建了 vncserver。这个想法是执行“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 回答