6

我想设置一个 cron 作业来运行 python 脚本,但它给了我这个错误:

RuntimeError: could not open display

这是因为我导入了一个需要我打开显示(pylab例如)的模块。即使我的脚本没有生成任何要在监视器上显示的图片。

有什么方法可以让 crontab 在显示打开的情况下运行我的作业(就像我ssh -X进入机器一样)?我实际上不需要为监视器生成任何图表。我只需要正确导入我的模块。

4

2 回答 2

4

您需要有效的 DISPLAY 和 XAUTHORITY 才能在 Cron 中使用 X-Programms!

设置 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 回答