与cron一起使用notify-send

时间:2013-12-11 16:00:10

标签: cron notify

我一直在尝试将notify-send与cron一起使用。我已经检查了stackoverflow和其他论坛上给出的大量答案。但我没有看到notify-send弹出窗口出现。我目前正在运行Ubuntu 13.10。我已经能够更早地开始工作(大约3个月前我有Ubuntu 11.10)但是我不记得我怎么也看不到我在这里做错了什么。

我当前的crontab看起来像:

*/1 * * * * export DISPLAY=:0.0 && export XAUTHORITY=/home/harold/.Xauthority && /usr/bin/notify-send "$(date)"

我尝试了许多在线提供的解决方案,包括在sudo -u harold之前使用/usr/bin/notify-send ...。我也尝试使用export DISPLAY=:0代替=:0.0。弹出窗口仍然没有出现。

我也试过创建一个脚本。运行脚本的cron作业如下所示:

*/1 * * * * cd /home/harold/bin && ./notify-send-test.sh

我的脚本(notify-send-test.sh)看起来像是:

#!/bin/bash
#export DISPLAY=:0
#export XAUTHORITY=/home/harold/.Xauthority
/usr/bin/notify-send "$(date)"
echo "trying to notify at $(date)" >> /home/harold/bin/cronlog.txt

我尝试使用注释行而不使用它们。这些组合似乎都不起作用。我也尝试过使用export DISPLAY=0.0

我每分钟都会在cronlog.txt文件中获得预期的输出。这意味着我的脚本正在执行,但通知发送不是。

我想知道我做错了什么。很高兴提供可能有用的更多信息。

次要问题: 还有一些关于cron无法使用某些环境变量的事情。我不明白这意味着什么以及它如何影响我使用cron的方式。如果有人可以解释这一点会很好。

1 个答案:

答案 0 :(得分:1)

DBUS_SESSION_BUS_ADDRESS env变量不会在cron守护程序中设置。设置此值将解决您的问题。将以下更改添加到.sh文件并从crontab中调用它。

<强> notify-send-test.sh

#!/bin/bash
username=$(/usr/bin/whoami)
pid=$(pgrep -u $username nautilus)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//' )
export DBUS_SESSION_BUS_ADDRESS=$dbus
/usr/bin/notify-send "$(date)"

<强> crontab的

* / 1 * * * * /home/harold/bin/notify-send-test.sh