Cron作业:如何运行需要打开显示的脚本?

时间:2012-06-13 12:40:45

标签: python linux cron crontab x11

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

RuntimeError: could not open display

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

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

1 个答案:

答案 0 :(得分:1)

您需要有效的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!