Cron与notify-send

时间:2013-05-13 10:19:27

标签: linux cron notify

我需要显示来自cron作业的通知。我的crontab类似于:

$ crontab -l
# m h  dom mon dow   command
  * *   *   *   *    Display=:0.0 /usr/bin/notify-send Hey "How are you"

我检查了/var/log/syslog并且命令实际上每分钟执行一次,但它没有弹出通知。 谁能帮助我理解为什么?

13 个答案:

答案 0 :(得分:16)

我找到了答案:

$ crontab -l
# m h  dom mon dow   command
  * *   *   *   *    export DISPLAY=:0.0 && export XAUTHORITY=/home/ravi/.Xauthority && sudo -u ravi /usr/bin/notify-send Hey "How are you"

谢谢, 拉维

答案 1 :(得分:4)

在Ubuntu 14.04中,导出显示对我不起作用。下面是我用来在笔记本电脑的电池状态变得太低时关闭虚拟机的cron脚本。行设置DBUS_SESSION_BUS_ADDRESS是最终使警告正常工作的修改。

#!/bin/bash

# if virtual machine is running, monitor power consumption
if pgrep -x vmware-vmx; then

  bat_path="/sys/class/power_supply/BAT0/"

  if [ -e "$bat_path" ]; then

    bat_status=$(cat $bat_path/status)

    if [ "$bat_status" == "Discharging" ]; then

      bat_current=$(cat $bat_path/capacity)

      # halt vm if critical; notify if low
      if [ "$bat_current" -lt 10 ]; then

        /path/to/vm/shutdown/script
        echo "$( date +%Y.%m.%d_%T )" >> "/home/user/Desktop/VM Halt Low Battery"

        elif [ "$bat_current" -lt 15 ]; then
        eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
        notify-send -i "/usr/share/icons/ubuntu-mono-light/status/24/battery-caution.svg"  "Virtual machine will halt when battery falls below 10% charge."

      fi

    fi

  fi

fi

exit 0

相关部分在这里:

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";

我在这里找到了解决方案:https://askubuntu.com/a/346580/255814

答案 2 :(得分:3)

只有这对我有用(Xubuntu)

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME xfce4-session)/environ)"; notify-send  "hello world" 

如果您在gnome环境中,则需要将xfce4-session更改为gnome-session

参考:https://askubuntu.com/questions/298608/notify-send-doesnt-work-from-crontab

答案 3 :(得分:3)

添加DBUS_SESSION_BUS_ADDRESS

* * * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus /usr/bin/notify-send 'helloworld..' 'msg...'

答案 4 :(得分:1)

在fedora 22上为我工作:

在发送notify-send get之前将此行放在.sh脚本中:

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)"

答案 5 :(得分:1)

我在Ubuntu 18.04上使用i3。我的解决方法是:

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) notify-send Hey "this is dog!"

答案 6 :(得分:0)

我创建了一个/ usr / bin脚本,该脚本使用DISPLAY-:0.0技术http://pastebin.com/h11p2HtN

不考虑XAUTHORITY。我将不得不进一步调查。

答案 7 :(得分:0)

简单而简化的答案:

01 * * * * export DISPLAY=:0.0 && notify-send Hey "How are you"

如果您需要Xauthority权限,请使用$LOGNAME变量

这是一个可推广的表单
01 * * * * export DISPLAY=:0.0 && && export XAUTHORITY=/home/$LOGNAME/.Xauthority notify-send Hey "How are you"

正如@tripleee所指出的,这里并没有真正需要sudo

答案 8 :(得分:0)

在最新的Ubuntu版本上,以下应该可以工作。

#notify_me.sh, can be placed e.g. in your home directory

#!/bin/bash
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
# the actual notification
DISPLAY=:0 notify-send "Notify me!"

然后,您像往常一样通过crontab向用户的cronjob中添加一行。

答案 9 :(得分:0)

类似于上面的nmax,我还通过设置DBUS_SESSION_BUS_ADDRESS环境变量解决了该问题。 但是,我将Linux Mint 19(xfce4)和XMonad结合使用,由于某种原因,我没有运行进程xfce4-session。相反,我发现xfce4-terminal(通常)正在运行,这导致脚本开头出现以下行:

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME xfce4-terminal)/environ)"

这为我解决了这个问题。

答案 10 :(得分:0)

如果您遇到问题,即您的notify-send脚本在本地运行良好,但不适用于cron作业,请使用此命令。并将“ saurav”替换为您的用户名。

sudo -u saurav DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "Your message goes here"

答案 11 :(得分:-1)

可能你可以试试:

* * * * * env DISPLAY=:0.0 sudo -u ravi /usr/bin/notify-send Hey "How are you"

答案 12 :(得分:-2)

在脚本中调用notify-send时尝试此操作:

echo "PASSWORD" | sudo -u USER notify-send "your alert message"