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
и команда фактически выполняется каждую минуту, но она не всплывает уведомление.
Кто-нибудь может помочь мне понять, почему?
8 ответов
Я нашел ответ:
$ 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"
спасибо, Рави!--2-->
в 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
to 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 скрипт перед уведомлением-отправить get called:
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"