我不知道为什么,但是当我直接运行脚本时,与使用织物运行时相比,我得到了不同的结果。( http://docs.fabfile.org )
我正在尝试在亚马逊 ec2 vm 上的 ubuntu 13.04 上自动运行 vncserver 和 xfce4。
这是我的 shell 脚本:
echo $USER
vncserver -kill :1
pkill Xtightvnc|true; sleep 1; pkill -9 Xtightvnc|true
rm -fr $HOME/.vnc
mkdir $HOME/.vnc
chmod 700 $HOME/.vnc
echo 123457 | vncpasswd -f > $HOME/.vnc/passwd
chmod 600 $HOME/.vnc/passwd
cp /tmp/setuptmplts/home/_vnc/xstartup $HOME/.vnc/
chmod 755 $HOME/.vnc/xstartup
mkdir -p $HOME/.config
cp -a /tmp/setuptmplts/home/_config/xfce4 $HOME/.config/
vncserver -geometry 1366x768 -depth 24 :1
当我直接在 ec2 机器上运行此脚本时,它可以正常工作,我可以连接到它并查看 xfce 桌面。
但是当我用fabric运行它时,它运行没有错误,甚至我可以连接到vnc,但我只看到一个带有十字光标的灰色屏幕。这意味着我有 vncserver 进程但没有 xfce。
这是我的fabfile:
from fabric.api import run, env, task
env.use_ssh_config=True
@task
def vnc():
run('/home/ubuntu/b')
我像这样运行我的 fabfile(我有一个 .ssh/config 文件):
fab -H ec2 vnc
它将没有错误地完成,但我没有 xfce 进程。
但是如果我通过 ssh 运行它,我将拥有 xfce 进程。
ssh ec2 /home/ubuntu/b
或者,如果我通过 ssh 连接到 vm,然后直接运行它,它就可以工作并且 xfce 是实时的。
我已将这两行添加到 bash 脚本 (/home/ubuntu/b) 的末尾:
sleep 3
echo `pgrep xfce`
而且我看到 xfce 在这两种情况下都是有效的!这意味着当我尝试使用织物时,我有 xfce!但我看到当织物完成它的工作时,xfce 进程就死了!当 vncserver 处于活动状态时。
我的 xstartup 文件是这样的(/tmp/setuptmplts/home/_vnc/xstartup):
#!/bin/sh
xrdb $HOME/.Xresources
xsetroot -solid grey
#x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#x-window-manager &
# Fix to make GNOME work
export XKL_XMODMAP_DISABLE=1
/etc/X11/Xsession
我尝试取消注释 x-window-manager 但没有什么不同。xfce 进程在织物完成后死亡,但在我尝试使用 ssh 或直接使用时仍然存在。