3

我有一个通过 crontab 运行的 python 程序,并且运行良好。但是,我决定添加通知我它正在做什么的功能,但它突然失败了。它从命令行运行,但是,将其作为 crontab 程序运行会导致它失败

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

我究竟做错了什么?

编辑 我希望这个程序仍然从 cron 运行,并能够利用通知用户它的工作。有没有办法做到这一点?

编辑 2 我尝试过使用 root 的 crontab,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 回答 4

4
* * * * * 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\" "

根据建议,解释,不幸的是不是我的

于 2010-07-21T18:27:48.527 回答
2

您正在尝试在所述资源不可用的环境中运行需要用户资源的脚本。如果你想让它工作,你将不得不剥离所有对 PyGTK 和会话总线的引用的脚本。

于 2010-07-21T17:56:52.447 回答
2

我只想提一下,以下配方适用于出色的窗口管理器的用户:

*/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
于 2012-10-05T17:37:04.857 回答
1

您正在尝试对无法访问图形终端的 cron 程序使用 GUI(GTK+ 库调用)。当您从 cron 运行它时,您需要避免创建对话框和窗口。

于 2010-07-21T17:55:18.687 回答