Пользователь Crontab + Python + Случайные обои = Не работает? - PullRequest
5 голосов
/ 26 апреля 2010

У меня есть скрипт 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)

Но нет настольных изменений, есть идеи?

Ответы [ 3 ]

6 голосов
/ 26 апреля 2010

Ваш сценарий зависит от переменной среды DISPLAY, которая устанавливается при запуске сценария из оболочки в сеансе X, но не устанавливается, когда сценарий запускается из cron.

2 голосов
/ 26 апреля 2010

Чтобы установить переменную окружения DISPLAY, я бы поместил ее непосредственно в crontab. Кроме того, я бы сделал исполняемый скрипт и дал бы ему правильный заголовок (#!/usr/bin/env python), чтобы он мог выполняться напрямую. Кроме того, вы можете положиться на то, что PWD будет установлен на HOME при запуске crontab.

Мой crontab будет выглядеть так:

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

Вы также можете установить PATH (так же, как DISPLAY), чтобы bin/ даже не был необходим.


Основная проблема при настройке окружения в crontab заключается в том, что значения не с переменной интерполяцией. Например, это не даст ожидаемых результатов:

PATH=$HOME/bin:$PATH
2 голосов
/ 26 апреля 2010

Согласно наблюдению Боло, я забыл о встраивании DISPLAY либо в скрипт, либо в crontab.

Самое простое решение - добавить crontab к env DISPLAY=:0.0

так:

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