Запуск скрипта Python из crontab - PullRequest
3 голосов
/ 21 июля 2010

У меня есть программа на Python, которая работает через crontab и работает отлично.Тем не менее, я решил добавить возможность уведомлять меня о том, что он делает, и вдруг он терпит неудачу.Он запускается из командной строки, однако запуск его как программы crontab приводит к сбою

libnotify-Message: Unable to get session bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.

Что я делаю не так?

Редактировать Я хотел быэта программа по-прежнему запускается из cron и может извещать пользователя о своей работе.Есть ли способ сделать это?

Редактировать 2 Я пытался использовать crontab root и sudo -u esr python script.py, но это тоже не получается, молча.

Редактировать 3 Это возможно!Вот код.

* * * * * su $user -c "DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(ps -au esr | grep -i "gnome-session" | awk '{ print $1 }')/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//') $(whereis notify-send | awk '{ print $2 }') -u normal -t 20000 \"Hello\" "

Ответы [ 4 ]

4 голосов
/ 21 июля 2010
* * * * * su esr -c "DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(ps -au esr | grep -i "gnome-session" | awk '{ print $1 }')/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//') $(whereis notify-send | awk '{ print $2 }') -u normal -t 20000 \"Hello\" "

Согласно предложению, объяснение , к сожалению, не мое

2 голосов
/ 05 октября 2012

Я просто хотел упомянуть, что следующий рецепт работает для пользователей удивительного оконного менеджера:

*/1 * * * * DBUS_SESSION_BUS_ADDRESS=$(grep -zi DBUS /proc/$(pgrep awesome)/environ | sed -r -e 's/^DBUS_SESSION_BUS_ADDRESS=//') DISPLAY=":0.0" notify-send -t 0 blah blah
2 голосов
/ 21 июля 2010

Вы пытаетесь запустить сценарий, который требует пользовательских ресурсов в среде, где указанные ресурсы недоступны.Если вы хотите, чтобы это работало, вам придется удалить скрипт из всех ссылок на PyGTK и на шину сеанса.

1 голос
/ 21 июля 2010

Вы пытаетесь использовать GUI (вызовы GTK + библиотеки) для программы cron, которая не имеет доступа к графическому терминалу. Вам нужно избегать создания диалогов и окон при запуске из cron.

...