我想要一个 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。我按照说明进行操作并成功设置了变量。
我的脚本现在可以运行了!