子进程退出导致dbus-laauch失败

子进程退出导致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

我知道显示器是: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是正确的。你能告诉我发生了什么事吗?

答案1

我从这里找到答案。 使用 cron 更新 Ubuntu 上的 Pidgin IM 状态

cron 在自己的环境中运行,因此,我们必须找到变量 DBUS_SESSION_BUS_ADDRESS、XAUTHORITY 和 DISPLAY。我按照说明进行操作并成功设置了变量。

我的脚本现在可以运行了!

相关内容