帮我在Ubuntu上设置一个cron作业

时间:2011-04-28 13:49:12

标签: python cron dbus ubuntu-10.10

嗨:)我想要一个每20分钟通知程序类型的应用程序,并决定自己开发一个使用Tomboy笔记。我读了一下crontab并通过sudo crontab -e命令设置了一份工作。

*/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与Tomboy接口的教程,并提出了上述代码。

当我手动运行代码时,我可以打开Tomboy注释(警告消息)但是使用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.

2 个答案:

答案 0 :(得分:2)

根本问题是在您的情况下需要运行X会话,并且当CRON脚本运行时,它运行时没有这样的会话(它实际上是从任何终端分离的)。 Dbus可执行文件需要能够初始化X会话(它实际上不需要运行X)。

有几种解决方案:

  • 类似的问题是described here。他们的解决方案是运行Xvfb或类似程序以允许所有进程访问X,即使它们实际上没有显示任何内容。
  • 另一种方法是described here。请参阅,如果只是导出相关变量(您可以在Python中执行此操作或将它们包装在脚本中CRON启动并在调用python解释器之前将它们放入)解决了您的问题。注意,该线程讨论了dbus-launch,这是一个守护进程启动过程,但是dbus-send在这里是一个保护伞。
  • 只需将脚本中的DISPLAY变量设置为described here即可。这应该足以让DBUS运行。

我认为第三种解决方案是最简单的,但现在你有不止一种。

答案 1 :(得分:0)

不要执行sudo crontab,只需执行crontab -e即可将crontab作为userprofile运行并提供系统python的完整路径,您可以通过{{{ 1}}。