6

Python スクリプトを実行する cron ジョブを設定したいのですが、次のエラーが表示されます。

RuntimeError: could not open display

これは、ディスプレイを開く必要があるモジュールをインポートしたためです (pylabたとえば、)。私のスクリプトはモニターに表示する画像を生成しませんが。

ディスプレイを開いた状態で crontab にジョブを実行させる方法はありますssh -Xか? 実際にモニターにグラフを生成する必要はありません。モジュールを正しくインポートするだけです。

4

2 に答える 2

4

Cron で X プログラムを使用するには、有効な DISPLAY と XAUTHORITY が必要です。

DISPLAY の設定は非常に簡単です。Bash に次のように入力します。

export DISPLAY=":0.0"

有効な XAUTHORITY を取得するには、それを探す必要があります。Debian/Gnome/gdm3 では、それらは var/run/gdm3/*/database に保存されます。次のスクリプトを使用しました。

export DISPLAY=":0.0"
[ -z $USER ] && USER=$( who | awk '{ print $1 }' | sort | uniq >/tmp/test )
for I in /var/run/gdm3/*; do
    AUTHUSER="`echo $I | awk -F '-' '{ print $3 }'`"
    for J in $USER; do
        [ "${AUTHUSER}" = "${J}" ] || continue
        USER="$J"
        export XAUTHORITY="${I}/database" && break
    done
done
sudo -u ${USER} /Path/to/xProgramm

Var $USER は、スクリプトが有効なユーザーを探すよりも空にすることができます。それ以外の場合は、スクリプトに var! を伝えることができます。

于 2012-07-03T11:00:37.877 に答える
2

xvfbまたは同様のツールを使用して、フレームバッファでアプリケーションを実行することもできます。

ダウンロードまたsudo apt-get install xvfb

使用法:

xvfb :1 -screen 0 800x600x8 & # WIDTHxHEIGHTxCOLORDEPTH
export DISPLAY=":1"
java application_name.jar 

またはそれより短い:

xvfb-run -a -e /tmp/some/log/file.log /home/user/application.run

-a表示番号を自動的に選択し、-e fileエラー メッセージのログファイルを指定します。

于 2015-12-20T16:55:47.837 に答える