2011-04-28 2 views
0

안녕하세요 :) 저는 매 20 분 알리미 종류의 앱을 갖고 싶었고 Tomboy 노트를 사용하여 스스로 개발하기로 결정했습니다. 나는 crontab에 대해 읽고 sudo crontab -e 명령을 통해 일자리를 설정했다. 우분투에서 cron 작업을 설정하는 데 도움이

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

그리고처럼 내 파이썬 코드가 갈 것이다 : 나는 DBUS 인터페이스에 대해 아무것도 알고 있지만 톰보이와 인터페이스 DBUS를 사용하는 튜토리얼을 읽고하지 않는

#!/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")) 

이 함께했다 위의 코드.

수동으로 코드를 실행하면 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. 
+0

이 권한이 표시되면 cronjob은 루트 권한으로 실행되며 루트 권한에는 X11 세션이 없습니다. 이제 이것을 마이그레이션해야한다면 SU 또는 SF에 있어야합니까? – Bobby

+0

@Bobby, 나는 SU – dawebber

답변

2

기본적으로 문제는 실행중인 X 세션이 필요하며 CRON 스크립트가 실행될 때 세션없이 실행됩니다 (실제로 모든 터미널에서 분리되어 실행 됨). Dbus 실행 파일은 X 세션을 초기화 할 수 있어야합니다 (실제로는 실행중인 X가 필요하지 않습니다).

  • 비슷한 문제가 described here입니다 :

    솔루션의 몇 가지가 있습니다. 그들의 해결책은 실제로 아무 것도 표시하지 않더라도 모든 프로세스가 X에 액세스 할 수 있도록 Xvfb 또는 유사하게 실행하는 것입니다.

  • 다른 접근 방법은 described here입니다. 파이썬에서 그렇게 할 수 있거나 (CRON이 파이썬 인터프리터를 호출하기 전에 CRON을 실행하고 스크립트에 넣어두면) 문제를 해결한다. 이 스레드는 데몬 시작 프로세스 인 dbus-launch에 대해 설명하지만 dbus-send는 여기에 동일한 우산 아래 있습니다.
  • 스크립트의 DISPLAY 변수를 described here으로 설정하기 만하면됩니다. 그것은 DBUS가 실행되기에 충분해야합니다.

제 3의 해결책이 가장 쉽지만 지금은 둘 이상이 있다고 생각합니다.

+0

나는 UbuntuForums의 DISPLAY 솔루션에 대해 이미 읽었지만 아무 것도 이해하지 못했기 때문에 그것을 시도하지 않았습니다 : P. 이제 설정 한 후에 작동합니다. 감사합니다 : D 조 */20 * * * * 수출 DISPLAY = : 0 && 파이썬/홈 /phantom/Desktop/alarm.py 2>/가정/팬텀/데스크탑/whatswrong.log' – sarath

+0

BTW에 대해 더 자세히 알 수 있습니까? X 세션? 어떤 리소스? – sarath

+0

@Sarath, 당신이 알고 싶은 것에 달려 있습니다. 그것은 DBUS 또는 일반적으로 관련이 있습니까? – dawebber

0

sudo의 crontab을하지만, 당신의 사용자 프로필로 실행하는 crontab을위한 crontab -e을하고 시스템 파이썬의 전체 경로를 제공하지 마십시오, 당신은 which python하여 얻을 수 있습니다.

+0

라고 말하고 싶습니다. Senthil과 같은 오류가 나타납니다. 그리고'시스템 파이썬의 전체 경로 제공'을 의미합니까? – sarath

+0

python 실행 파일의 전체 경로입니다 (예 : '/ usr/bin/python'을 사용하십시오. – samplebias

+0

@samplebias @Senthil Kumaran 나중에 내가 그 부분을 가지고 있지만 그것을 어디에 추가합니까? – sarath