Пользователь 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