【问题标题】:User Crontab + Python + Random wallpapers = Not working?用户 Crontab + Python + 随机壁纸 = 不工作?
【发布时间】:2011-02-12 09:53:20
【问题描述】:

我有一个 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)

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

【问题讨论】:

  • 你看到gconf-editor中的值变化了吗?如果您从 gconf-editor 设置值,壁纸会改变吗?
  • 是的,是的,正如我所说,脚本在 cron 调用之外工作,就像 ~/bin/change-background.py 和 python ~/bin/change-background.py 一样

标签: python ubuntu cron gnome gconf


【解决方案1】:

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

【讨论】:

  • 请以答案的形式说出你的答案:)
  • @Andrew 我虽然做到了。您的问题是“有什么想法吗?”,鉴于您提供的信息有限,我给了您最可能的原因。我已经正确猜到问题不在于 cron 或 gconf,而在于特定的环境变量。看到你显然精通*NIX和Python,我觉得没必要教你如何设置环境变量(为了记录,在Python中是os.environ["DISPLAY"] = ...)。
【解决方案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

【讨论】:

  • 脚本是可执行的,具有正确的标题,并且路径设置正确(我在 ~/bin 中有很多东西)但我只是喜欢明确说明正在发生的事情,所以有 'export DISPLAY: crontab 中的 0.0' 内联会提醒我为什么它会在 6 个月后出现:D 感谢您的关注。
【解决方案3】:

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

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

所以:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py

【讨论】:

  • Errrr,除非删除了某些评论:his,而不是 this,所以不需要等待 44 小时? (不过,那是a discussion on Meta。)
  • 不,对不起,我想你错过了理解,或者我不够清楚,我正在等待社区决定;到我可以接受我自己的答案时,谁有更多的赞成票,谁就会被接受。这是唯一的公平。
猜你喜欢
  • 2013-11-08
  • 2020-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多