2010-07-21 322 views
3

我有一個通過crontab運行的python程序,並且完美地工作。但是,我決定增加通知我它正在做什麼的能力,並突然失敗。它從命令行運行,但是,運行它作爲crontab程序導致它失敗從crontab運行python腳本

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\" " 
+0

你可以使用'的sendmail '通知用戶程序的結果。 – 2010-07-21 18:02:48

+0

sendmail可以工作,但它與使用日誌來存儲結果一樣有效,這不幸並不是我正在尋找的。 – EricR 2010-07-21 18:03:40

回答

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

由於每一個建議,an explanation,可惜不是我

+0

我認爲如果你能解釋這一行的每一部分以及它的作用,對其他人會有所幫助。 – 2010-07-22 14:59:10

+0

肯定的事,做完了。 – EricR 2010-07-22 21:42:14

1

您正在嘗試爲無法訪問圖形終端的cron程序使用GUI(GTK +庫調用)。當你從cron運行它時,你需要避免創建對話框和窗口。

2

您正試圖運行一個需要用戶資源的腳本,該腳本在所述資源不可用的環境中運行。如果你想要這個工作,你將不得不刪除所有對PyGTK的引用的腳本和會話總線。

+2

這是有道理的,但我想利用通知,有沒有辦法從crontab做到這一點? – EricR 2010-07-21 17:58:08

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