У меня есть сценарий 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)
Но никакой desktopy changey, Какие-либо идеи?
Ваш сценарий зависит от переменной среды 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
По наблюдениям Боло, я забыл о встраивании ДИСПЛЕЯ в скрипт или crontab.
Самое простое решение - добавить к crontab env DISPLAY =: 0.0
так:
* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py