5

我有一个 python 脚本,可以通过 gconf 将桌面壁纸正确设置为给定文件夹中的随机图片。

然后我的 crontab 中有以下条目

* * * * * python /home/bolster/bin/change-background.py

并且系统日志正确报告执行

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)

但没有桌面变化,有什么想法吗?

4

3 回答 3

6

您的脚本取决于DISPLAY环境变量,当您在 X 会话中从 shell 执行脚本时设置该环境变量,但在从 cron 运行脚本时取消设置。

于 2010-04-26T13:27:09.777 回答
2

根据 Bolo 的观察,我忘记了将 DISPLAY 构建到脚本或 crontab 中。

最简单的解决方案是在 crontab 前面加上env DISPLAY=:0.0

所以:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py
于 2010-04-26T13:35:07.663 回答
2

要设置 DISPLAY 环境变量,我会将它直接放在 crontab 中。另外,我会让脚本可执行并给它一个适当的标题(#!/usr/bin/env python),以便它可以直接执行。此外,您可以依赖在 crontab 运行时将 PWD 设置为 HOME。

我的 crontab 看起来像这样:

DISPLAY=:0.0
* * * * * bin/change-background.py

您还可以设置 PATH(以与 DISPLAY 相同的方式),以便bin/甚至不需要。


在 crontab 中设置环境的主要问题是值不是变量插值的。例如,这没有给出预期的结果:

PATH=$HOME/bin:$PATH
于 2010-04-26T16:06:29.880 回答