2

理由はわかりませんが、スクリプトを直接実行すると、ファブリックで実行した場合とは異なる結果が得られます。( 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 または直接試してみると生きています。

4

2 に答える 2

1

あなたの bash (または通常使用するシェル) には、Fabric の実行時に設定されていない環境変数があると思われます。Fabric で「エクスポート」を実行し、ログイン時に取得しているリストと比較します。

DISPLAYより具体的には、変数が設定されていないことに関係していると思われます。

Fabric での環境変数の設定については、https://stackoverflow.com/a/13801188/260805を参照してください。

于 2013-10-17T14:39:46.560 に答える