Warum führt cronjob den Befehl feh nicht aus?


3

Ich erstelle einen Cronjob, um alle zehn Minuten ein neues Bild von einer Quelle herunterzuladen und es mit feh als Hintergrundbild festzulegen. Die Datei wird heruntergeladen, aber das Hintergrundbild ändert sich nicht. Wo ist das Problem? crontab -eführt Befehle wie der Benutzer aus, also sollte es sein, als würde ich die Linie laufen lassen - das arbeitet übrigens.

Hier ist das Drehbuch

#!/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 ist crontab -efür den Benutzer, welcher Hintergrund geändert werden soll (aka ich)

*/10 * * * * /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh

In meinem Syslog habe ich diese Zeilen gefunden

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) 

Antworten:


3

Leider wird nicht genug betont, dass die von cron get gestarteten Umgebungsprozesse sehr einfach sind, sondern nur die wichtigsten Variablen und Werte enthalten. Sie können dies überprüfen, indem Sie ein Shell-Skript ausführen, das nur Folgendes enthält

#!/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 von Anwendungen).

Sie müssen so etwas wie setzen

export DISPLAY=:0.0

in Ihr Skript und bessere Chancen zu haben.


1

So vervollständigen Sie Gombais Antwort mit Anweisungen:

Führen Sie aus env | grep -i displayund überprüfen Sie den Wert von DISPLAY. Es ist wahrscheinlich :0.0oder :0.

Ändern Sie Ihre Crontab entsprechend:

*/10 * * * * DISPLAY=:0 /bin/sh /home/tim/Dokumente/Scripts/wallpaper.sh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.