Puncte:0

Notify-send nu funcționează din ROOT crontab

drapel pg

Acest script funcționează bine în crontab-ul utilizatorului, dar trebuie să rulez din ROOT crontab, dar nu funcționează:

#!/bin/sh 
# cron.sh
# Notifică utilizatorul despre data și ora
sursa /home/user/.bashrc
pid=$(pgrep -u utilizator openbox | head -n 1)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//' )
export DBUS_SESSION_BUS_ADDRESS=$dbus
export HOME=/acasă/utilizator
export DISPLAY=:0
/usr/bin/notify-send „title” „$(/bin/date)”

Scriptul a fost găsit aici: script crontab

Scriptul este plasat pe /home/user/cron.sh cu toate permisiunile (777). Rădăcina mea crontab este:

* * * * * /home/user/cron.sh

Dacă folosesc acest script în crontab utilizator normal, funcționează și arată textul pop-up, dar nu de la rădăcină crontab. Syslog (/var/log/syslog ) nu afișează erori la declanșarea crontab.

Artur Meinild avatar
drapel vn
Vă rugăm să detaliați o serie de lucruri: 1) Ce nu funcționează, scriptul nu rulează deloc? 2) Care este locația și permisiunile fișierului script. 3) Care este linia crontab folosită pentru a rula scriptul. În general, oferiți cât mai multe informații posibil, altfel este foarte greu de ajutat.
Artur Meinild avatar
drapel vn
S-ar putea ca atunci când rulează de la root, să fie utilizatorul root cel care primește notificarea, și nu celălalt utilizator? Puteți adăuga această linie pentru a verifica dacă scriptul rulează efectiv: `touch /home/user/script-has-run`. Dacă fișierul `/home/user/script-has-run` există, atunci scriptul a fost executat.
drapel hr
AFAIK `source` este un bashism - în POSIX /bin/sh ar trebui să utilizați `. /home/user/.bashrc`, dar într-adevăr nu ar trebui să aprovizionați un `.bashrc` într-un shell `sh` - dacă doriți caracteristici din `.bashrc` al utilizatorului, comutați shebang la `#!/bin/ bash`
Puncte:1
drapel vn

Sunt destul de sigur notifica-trimite trebuie să fie rulat ca utilizator care ar trebui să primească notificarea. Încercați să înlocuiți ultima linie cu aceasta:

su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'

The su user -c comanda comută utilizatorul la utilizator și -c transmite următoarea comandă către shell.

Această declarație ar trebui să treacă la utilizatorul corect și să ruleze comanda.

Dacă doriți să rulați întregul script ca alt utilizator, aruncați o privire la aceste întrebări și răspunsuri de la Stack Overflow.

drapel hr
Nu cred că `su` transmite argumente de sfârșit la comanda `-c`, nu-i așa? Poate că trebuie să fie `su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'`. Indiferent, dacă veți rula `notify-send` ca `user`, atunci cu siguranță ar fi mai logic să rulați totul din crontab `user` ...
Artur Meinild avatar
drapel vn
cred ca ai dreptate. Cu toate acestea, chiar nu îmi pot da seama de cazul de utilizare al OP, dar am încercat să ajut din ceea ce am putut găsi în altă parte.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.