用户 Crontab + Python + 随机壁纸 = 不工作?
我有一个Python脚本,它可以通过gconf把桌面壁纸设置为指定文件夹中的随机图片。
然后我在我的定时任务(crontab)里加了以下这一行:
* * * * * python /home/bolster/bin/change-background.py
系统日志(syslog)也正确地显示了这个脚本被执行了。
Apr 26 14:11:01 bolster-desktop CRON[9751]: (bolster) CMD (python /home/bolster/bin/change-background.py)
Apr 26 14:12:01 bolster-desktop CRON[9836]: (bolster) CMD (python /home/bolster/bin/change-background.py)
Apr 26 14:13:01 bolster-desktop CRON[9860]: (bolster) CMD (python /home/bolster/bin/change-background.py)
Apr 26 14:14:01 bolster-desktop CRON[9905]: (bolster) CMD (python /home/bolster/bin/change-background.py)
Apr 26 14:15:01 bolster-desktop CRON[9948]: (bolster) CMD (python /home/bolster/bin/change-background.py)
Apr 26 14:16:01 bolster-desktop CRON[9983]: (bolster) CMD (python /home/bolster/bin/change-background.py)
但是桌面壁纸并没有改变,有什么想法吗?
3 个回答
2
要设置DISPLAY这个环境变量,我会直接把它放在crontab里。同时,我还会让脚本可以执行,并给它加上一个合适的头部(#!/usr/bin/env python
),这样就可以直接运行了。此外,你可以依赖于在crontab运行时,PWD会被设置为HOME。
我的crontab看起来会是这样的:
DISPLAY=:0.0
* * * * * bin/change-background.py
你也可以像设置DISPLAY一样设置PATH,这样就不需要bin/这个路径了。
在crontab中设置环境变量时,有一个主要的注意点就是,值不会被替换成变量的内容。比如,下面这个写法就不会得到预期的结果:
PATH=$HOME/bin:$PATH
2
根据Bolo的观察,我忘记在脚本或定时任务(crontab)中设置显示环境变量(DISPLAY)了。
最简单的解决办法是在定时任务前面加上 env DISPLAY=:0.0
。
所以:
* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py
6
你的脚本依赖于一个叫做 DISPLAY
的环境变量。这个变量在你从图形界面的命令行(也就是X会话)运行脚本时会被设置好,但如果你通过定时任务(cron)来运行这个脚本,这个变量就不会被设置了。