![Warum führt Cronjob den Befehl feh nicht aus?](https://rvso.com/image/1482469/Warum%20f%C3%BChrt%20Cronjob%20den%20Befehl%20feh%20nicht%20aus%3F.png)
Ich baue einen Cronjob, der alle zehn Minuten ein neues Bild von einer Quelle herunterlädt und es mit feh als Hintergrundbild einstellt. Die Datei wird heruntergeladen, aber das Hintergrundbild ändert sich nicht. Wo ist das Problem? crontab -e
führt Befehle als Benutzer aus, also sollte es so sein, wie ich die Zeile ausführen würde – was übrigens funktioniert.
hier ist das Skript
#!/bin/sh
#Filename
file="space-"$(date +%x_%H:%M:%S)
#save it
wget http://rammb.cira.colostate.edu/ramsdis/online/images/latest_hi_res/himawari-8/full_disk_ahi_true_color.jpg -O /home/tim/Bilder/Wallpaper/$file -o /dev/null
#set background
feh --bg-max /home/tim/Bilder/Wallpaper/$file
Hier erfahren Sie crontab -e
, welcher Hintergrund für den Benutzer (also mich) geändert werden soll.
*/10 * * * * /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh
In meinem Syslog fand ich diese Zeilen
Jan 31 21:40:01 LinuxMint CRON[18209]: (tim) CMD (/bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh)
Jan 31 21:40:11 LinuxMint CRON[18204]: (CRON) info (No MTA installed, discarding output)
Antwort1
Leider wird nicht genug betont, dass die von cron get gestarteten Umgebungsprozessesehreinfach, es enthält nur die wichtigsten Variablen und Werte. Sie können es überprüfen, indem Sie ein Shell-Skript ausführen, das nur
#!/bin/bash
set > /tmp/myset.txt
Sie werden sehen, dass dort keine DISPLAY-Variable festgelegt ist, die zum Ausführen von X-basierten Anwendungen erforderlich wäre (und abgesehen von seltenen Ausnahmen verwenden wir nur diese Art).
Sie müssen etwas wie
export DISPLAY=:0.0
in Ihr Skript und um bessere Chancen zu haben.
Antwort2
Um Gombais Antwort mit Anweisungen zu vervollständigen:
Führen Sie es aus env | grep -i display
und überprüfen Sie den Wert von DISPLAY
. Es ist wahrscheinlich :0.0
, oder :0
.
Passen Sie Ihre Crontab entsprechend an:
*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh