Cron с уведомлением-отправкой

Мне нужно показать уведомление из задания cron. Мой crontab - это что-то вроде:

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

Я проверил /var/log/syslog, и эта команда выполняется каждую минуту, но не появляется уведомление. Может ли кто-нибудь помочь мне понять, почему?

Ответы

Ответ 1

Я нашел ответ:

$ 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"

Спасибо, Ravi

Ответ 2

В Ubuntu 14.04 экспорт дисплея не работал у меня. Ниже приведен cron script, который я использую для выключения виртуальной машины, когда состояние батареи ноутбука становится слишком низким. Настройка линии 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

Ответ 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

Ответ 4

Я использую i3 на Ubuntu 18.04. Мой способ решить это:

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

Ответ 5

Работайте для меня в Fedora 22:

Поместите эту строку в .sh script перед вызовом уведомления-send:

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

Ответ 6

Я создал /usr/bin script, который использует технику DISPLAY-: 0.0 http://pastebin.com/h11p2HtN

Это не учитывает XAUTHORITY. Я должен буду исследовать это дальше.

Ответ 7

Простой и сокращенный ответ:

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

На последних версиях 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!"

Затем вы добавляете строку в свои пользовательские cronjobs через crontab как обычно.

Ответ 9

Возможно, вы можете попробовать:

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

Ответ 10

Попробуйте это, когда вы вызываете notify-send в свой script:

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