2011-04-28 68 views
0

嗨cron作業:)我想有一個每20分鐘,通知一類應用,並決定通過開發一個自己使用Tomboy記事。我讀了關於crontab並通過sudo crontab -e命令設置了一個工作。幫我安裝在Ubuntu

*/20 * * * * python /home/phantom/Desktop/alarm.py 2>/home/phantom/Desktop/whatswrong.log

我的Python代碼會是這樣的:

#!/usr/bin/env python 
import dbus, gobject, dbus.glib 
# Get the D-Bus session bus 
bus = dbus.SessionBus() 
# Access the Tomboy D-Bus object 
obj = bus.get_object("org.gnome.Tomboy","/org/gnome/Tomboy/RemoteControl") 
# Access the Tomboy remote control interface 
tomboy = dbus.Interface(obj, "org.gnome.Tomboy.RemoteControl") 
# Display the Start Here note 
tomboy.DisplayNote(tomboy.FindNote("alert")) 

我不知道有關的DBus接口什麼,但閱讀使用dbus與假小子接口的教程,並想出了以上代碼。

當我運行的代碼手動我可以打開假小子說明(警報消息),但使用cron我碰到下面的錯誤,我無法理解。請幫我解決。謝謝:)

Traceback (most recent call last): 
File "/home/phantom/Desktop/try.py", line 4, in <module> 
bus = dbus.SessionBus() 
File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 219, in __new__ 
mainloop=mainloop) 
File "/usr/lib/pymodules/python2.6/dbus/_dbus.py", line 108, in __new__ 
bus = BusConnection.__new__(subclass, bus_type, mainloop=mainloop) 
File "/usr/lib/pymodules/python2.6/dbus/bus.py", line 125, in __new__ 
bus = cls._new_for_bus(address_or_type, mainloop=mainloop) 
dbus.exceptions.DBusException: org.freedesktop.DBus.Error.Spawn.ExecFailed: /bin/dbus- launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed. 
+0

如果我看到這個權利,你的cronjob將運行根和根沒有一個X11會話。現在,如果我們應該遷移它,它應該在SU還是SF? – Bobby 2011-04-28 14:09:40

+0

@Bobby,我會說SU – dawebber 2011-04-28 15:40:35

回答

2

的根本問題是,一個運行的X會話在您需要的情況下,和cron腳本運行時,它運行沒有這樣一個會話(實際上它運行在所有的終端分離)。 Dbus可執行文件需要能夠初始化X會話(它實際上並不需要運行X)。

有幾個解決方案:

  • 類似的問題是described here。他們的解決方案是運行Xvfb或類似的操作來允許所有進程訪問X,即使它們實際上沒有顯示任何東西。
  • 不同的方法是described here。看到,如果只是導出相關的變量(你可以用Python做到這一點,或者將它們包裝在CRON啓動的腳本中,並在調用python解釋器之前將它們放入)解決了你的問題。請注意,該線程討論了dbus-launch,這是一個守護進程啓動進程,但dbus-send在這裏處於同一個傘下。
  • 只需在腳本中將DISPLAY變量設置爲described here即可。這對DBUS來說應該足夠了。

我覺得第三個解決方案是最簡單的,但現在你有一個以上的。

+0

我已經在ubuntu論壇瞭解展示解決方案,但沒有嘗試它,因爲我沒有弄懂:P。現在它設置後就可以工作了。感謝:d'*/20 * * * *出口DISPLAY =:0 &&蟒蛇/home/phantom/Desktop/alarm.py 2> /家/幻/桌面/ whatswrong.log' – sarath 2011-04-28 14:51:31

+0

BTW我能得到更多的瞭解X會話?任何資源? – sarath 2011-04-28 14:52:48

+0

@Sarath,這取決於你想知道的。因爲它涉及DBUS或一般? – dawebber 2011-04-28 15:39:19

0

不做sudo crontab中,但只是做一個crontab -e的crontab來運行爲您的用戶配置文件,並提供完整的路徑到你的系統的Python,您可以通過which python得到這個。

+0

我得到了同樣的錯誤Senthil。並且「提供你的系統python的完整路徑」的含義? – sarath 2011-04-28 14:22:52

+0

python可執行文件的完整路徑,例如'在/ usr/bin中/ python'。 – samplebias 2011-04-28 14:31:22

+0

@samplebias @Senthil Kumaran你是否有這部分,但添加它在哪裏? – sarath 2011-04-28 14:32:59