2013-10-17 45 views
2

我不知道为什么,但直接运行脚本时与运行织物时相比,我得到了不同的结果。 (http://docs.fabfile.org织物运行和直接运行之间的不同结果

我想在ubuntu 13.04上自动运行vncserver和xfce4上的amazon ec2虚拟机。

这是我的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脚本结束(/家/ Ubuntu的/ B):

sleep 3 
echo `pgrep xfce` 

而且我看到,XFCE是生活在这两种情况下!这意味着当我尝试使用织物时,我拥有xfce!但是我发现当织物完成其工作xfce进程死亡!而vncserver是活的。

我的xstartup文件是这样的(/ tmp目录/ setuptmplts /家庭/ _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窗口管理器,但没有什么不同。 xfce进程在完成织物后死亡,但是当我用ssh或直接尝试时生存。

回答

1

我怀疑你的bash(或者你通常使用的任何shell)有一个当你执行Fabric时没有设置的环境变量。执行Fabric中的“导出”并将其与您登录时得到的列表进行比较。

更具体地说,我怀疑它与DISPLAY变量没有设置有关。

查看https://stackoverflow.com/a/13801188/260805来设置Fabric中的环境变量。

2

我得到了这个答案从杰夫Forcier(@bitprophet) - 谢谢你杰夫

尝试摆弄的“PTY”参数来运行()/须藤()(也应该是一个CLI 标志控制同样的事情全球) - 我怀疑你在该脚本中运行的一些应用程序 对控制pty或 缺乏敏感。这往往是造成这种行为的原因。

+0

'run('/ home/ubuntu/b',pty = False)' – iman

相关问题