我不知道为什么但是当我直接运行脚本时,与使用fabric运行脚本时相比,我会得到不同的结果。 (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,然后直接运行它,它就可以正常运行。
我已将这两行添加到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或直接进行时,它就会生效。
答案 0 :(得分:2)
我得到了Jeff Forcier(@bitprophet)的答案 - 谢谢杰夫
尝试将'pty'参数改为run()/ sudo()(也应该是CLI 旗帜控制全局相同的事情) - 我怀疑一些应用程序 你在该脚本中运行对控制pty或敏感 缺乏。这通常是这种行为的原因 差。
答案 1 :(得分:1)
我怀疑你的bash(或你通常使用的任何shell)都有一个在执行Fabric时没有设置的环境变量。在Fabric中执行“export”并将其与您登录时获得的列表进行比较。
更具体地说,我怀疑它与未设置的DISPLAY
变量有关。
查看https://stackoverflow.com/a/13801188/260805以在Fabric中设置环境变量。