Warum führt Cronjob den Befehl feh nicht aus?

Warum führt Cronjob den Befehl feh nicht aus?

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 -efü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 displayund ü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

verwandte Informationen