2013-05-13 13 views
15

Potrzebuję pokazać powiadomienie z zadania crona. Moja crontab jest coś takiego:Cron z powiadomieniem-wysłaniem

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

Sprawdziłem /var/log/syslog a komenda jest wykonywana co minutę, ale nie pojawi się powiadomienie. Czy ktoś może mi pomóc zrozumieć, dlaczego?

Odpowiedz

16

znalazłem odpowiedź:

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

Dzięki Ravi

+3

Wystarczy dodać „export DISPLAY =: 0.0” wystarczyły dla mnie.Powiedział, że cronjob działa pod moim kontem użytkownika. XAUTHORITY jest prawdopodobnie potrzebne, gdy uruchamiane jest z innego konta niż to, w którym musi się pojawić popup. Dzięki. – Ruben

+0

Dzięki, to mi pomogło (nie musiałem używać "sudo") –

+2

Ja też. Mogę zmniejszyć to polecenie do '* * * * * export DISPLAY =: 0.0 && notify-send Hey" How are you "' – TomTom

0

stworzyłem skrypt/usr/bin, który używa Ekran-: 0.0 technikę http://pastebin.com/h11p2HtN

To nie bierze XAUTHORITY pod uwagę. Będę musiał zbadać to dalej.

-1

Może można spróbować:

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

+0

Downvote: Zadanie cron będzie już działać jako 'ravi', więc' sudo' nie dodaje tu niczego użytecznego. – tripleee

-2

Spróbuj tego podczas rozmowy notify-send w skrypcie:

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

4

W Ubuntu 14.04 eksportu wyświetlacz nie działa dla mnie. Poniżej znajduje się skrypt crona, którego używam do wyłączania maszyny wirtualnej, gdy stan baterii laptopa staje się zbyt niski. Ustawienie linii DBUS_SESSION_BUS_ADDRESS jest modyfikacją, która w końcu doprowadziła do prawidłowego działania ostrzeżeń.

#!/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 

odpowiedniej linii jest tutaj:

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

znalazłem rozwiązanie tutaj: https://askubuntu.com/a/346580/255814

0

pracować dla mnie w Fedorze 22:

Umieść tę linię w .sh skryptu przed zawiadomić-send się nazywa:

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

Prosta i zmniejszona odpowiedź:

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

Jeśli potrzebujesz zgody Xauthority, oto uogólnić forma używając $LOGNAME zmienna

01 * * * * export DISPLAY=:0.0 && && export XAUTHORITY=/home/$LOGNAME/.Xauthority notify-send Hey "How are you" 

jak podkreślił @tripleee, nie ma rzeczywistej potrzeby sudo tutaj