Cron
子程序退出導致 dbus-laauch 失敗
我想要一個 python 腳本來發送通知。該腳本可以成功執行並顯示我想要的內容。但是 crontab 沒有以正確的方式啟動它。
以下是參考libnotify的程式碼
def SendMessage(title, message): pynotify.init("ChinaBank") notice = pynotify.Notification(title,message) notice.show() return
我在 crontab 中所做的是
* * * * * display=`/home/li/script/FetchDisplay.sh` && export DISPLAY=$display && /home/li/projects/fetch-data/EuroForex.py 2>/home/li/error
在這裡,FetchDisplay.sh 是為了得到如下顯示:
#!/bin/bash if [ "$DISPLAY" != "" ]; then echo $DISPLAY exit fi if ["$USER" = "" ]; then USER=`whoami` fi pinky -fw | awk -v user=$USER 'NF == 6 {if($1 == user) {print $6}}' | awk 'NR==1{print $0}
錯誤輸出是
Traceback (most recent call last): File "/home/li/projects/fetch-data/EuroForex.py", line 43, in <module> SendMessage("Please be ready to sell", str(SellData)) File "/home/li/projects/fetch-data/EuroForex.py", line 15, in SendMessage notice.show() glib.GError: Error spawning command line 'dbus-launch --autolaunch=970be6bbf9ff49009918057c308cf56e --binary-syntax --close-stderr': Child process exited with code 1
我知道DISPLAY是**
:0
**,通過命令echo $DISPLAY
因此,我用它測試了 gnome-screensaver-command。
* * * * * export DISPLAY=:0 && /usr/bin/gnome-screensaver-command --lock 2>/home/li/screenerror
不幸的是,它沒有用,輸出是
** Message: Failed to get session bus: Error spawning command line 'dbus-launch --autolaunch=970be6bbf9ff49009918057c308cf56e --binary-syntax --close-stderr': Child process exited with code 1
我以為是DISPLAY的問題,但是變數DISPLAY是正確的。你能告訴我發生了什麼嗎?
我從這裡找到答案。 使用 cron 在 Ubuntu 上更新 Pidgin IM 狀態
cron 在自己的環境中執行,因此,我們必須找到變數 DBUS_SESSION_BUS_ADDRESS、XAUTHORITY 和 DISPLAY。我按照說明成功設置了變數。
我的腳本現在可以執行了!