GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzando Notifica-Invia con Cron?

Sto usando Arch Linux con KDE/Awesome WM. Sto cercando di ottenere
notify-send per lavorare con cron .

Ho provato a impostare DISPLAY /XAUTHORITY variabili ed eseguendo notify-send con “sudo -u”, tutto senza risultato.

Sono in grado di chiamare notifica-invia in modo interattivo dalla sessione e ricevere notifiche.

FWIW, il lavoro cron sta funzionando correttamente, cosa che ho verificato facendo eco a un file temporaneo. È solo la "notifica-invio" che non funziona.

Codice:

[[email protected] ~]$ crontab -l
* * * * *  /home/matrix/scripts/notify.sh

[[email protected] ~]$ cat /home/matrix/scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
echo "testing cron" >/tmp/crontest
sudo -u matrix /usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

[[email protected] ~]$ cat /tmp/crontest
testing cron
now tested notify-send

[[email protected] ~]$ 

Come puoi vedere, l'eco prima e dopo l'invio della notifica ha funzionato.
Inoltre ho provato a impostare DISPLAY=:0.0

AGGIORNAMENTO:
Ho cercato un po' di più e ho scoperto che DBUS_SESSION_BUS_ADDRESS deve essere impostato. E dopo averlo codificato usando il valore che ho ottenuto dalla mia sessione interattiva, il minuscolo messaggio di "ciao" ha iniziato a comparire sullo schermo ogni minuto!

Ma il problema è che questa variabile non è permanente per quel post, quindi proverò la soluzione della named pipe suggerita lì.

[[email protected] ~]$ cat scripts/notify.sh
#!/bin/bash
export DISPLAY=127.0.0.1:0.0
export XAUTHORITY=/home/matrix/.Xauthority
export DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-BouFPQKgqg,guid=64b483d7678f2196e780849752e67d3c
echo "testing cron" >/tmp/crontest
/usr/bin/notify-send "hello"
echo "now tested notify-send" >>/tmp/crontest

Da cron non sembra supportare l'invio di notifiche (almeno non direttamente) c'è qualche altro sistema di notifica che è più cron amichevole che posso usare?

Risposta accettata:

Devi impostare il DBUS_SESSION_BUS_ADDRESS variabile. Per impostazione predefinita, cron
non ha accesso alla variabile. Per rimediare, metti il ​​seguente script
da qualche parte e chiamalo quando l'utente effettua il login, ad esempio usando awesome e
il run_once funzione menzionata sul wiki. Qualsiasi metodo andrà bene, poiché
non danneggia se la funzione viene chiamata più spesso del necessario.

#!/bin/sh

touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

Questo crea un file contenente la variabile di ambiente Dbus richiesta. Quindi in
lo script chiamato da cron importi la variabile cercando lo script:

if [ -r "$HOME/.dbus/Xdbus" ]; then
  . "$HOME/.dbus/Xdbus"
fi

Ecco una risposta che utilizza lo stesso meccanismo
.

Correlati:come generare record SSHFP?
Linux
  1. Pianificazione delle attività di sistema con Cron su Linux

  2. Utilizzo di uno script Cron Wrapper

  3. Usando –exclude con il comando Du?

  4. Usare i colori con printf

  5. Utilizzo di lavori CRON per visitare l'URL?

Pianificazione di Cron Jobs con Crontab

Programmazione con cron &At

Usare l'a capo automatico con Mc?

Capire Crontab in Linux con esempi

Pianifica i lavori in Linux con il comando 'at'

Come pianificare i lavori Cron con Crontab