Пользователь Crontab + Python + Случайные обои = Не работает?

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

Решение

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

Чтобы установить переменную окружения 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

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

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

так:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py
Другие вопросы по тегам