理由はわかりませんが、スクリプトを直接実行すると、ファブリックで実行した場合とは異なる結果が得られます。( http://docs.fabfile.org )
Amazon ec2 vm の ubuntu 13.04 で vncserver と xfce4 を自動的に実行しようとしています。
これは私のシェルスクリプトです:
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 デスクトップを表示できます。
しかし、ファブリックで実行すると、エラーなしで実行され、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がライブになります。
次の 2 行を 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 または直接試してみると生きています。