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

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

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

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

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

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

    Спасибо, Рави

    В 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

    Только это работает для меня (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

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

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

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

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

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

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

     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 здесь

    Может быть, вы можете попробовать:

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

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

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