我想设置一个cron作业来运行python脚本,但是它给了我这个错误:
RuntimeError: could not open display
这是因为我导入了一个需要打开显示的模块(pylab例如)。即使我的脚本不会生成任何图片来显示在监视器上。
pylab
有什么方法可以让crontab在显示打开的情况下运行我的作业(就像我ssh -X进入机器一样)?我实际上不需要为监视器生成任何图形。我只需要正确导入模块即可。
ssh -X
您将需要有效的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!