Cron funktioniert nicht

Cron funktioniert nicht

Habe ein kurzes Shell-Skript „wallch.sh“ geschrieben, um meinen Desktop-Hintergrund zufällig zu ändern:

DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC

Und kopierte es nach /bin/und dann sudo chmod 755 /bin/wallch.shdorthin. Dies konnte problemlos vom Terminal aus ohne Fehler ausgeführt werden.

Wenn ich jedoch eine Zeile in Crontab hinzufüge (und dies als Benutzer vom Terminal aus tue), wie:

* * * * * /bin/wallch.sh

Es wollte einfach nicht laufen. Theoretisch hätte es jede Minute laufen müssen.

/var/log/syslogsagt:

Feb 25 19:36:01 user-Ubuntu CRON[11762]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:36:01 user-Ubuntu CRON[11761]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:37:01 user-Ubuntu CRON[11790]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:37:01 user-Ubuntu CRON[11789]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:38:01 user-Ubuntu CRON[11828]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:38:01 user-Ubuntu CRON[11827]: (CRON) info (No MTA installed, discarding output)

Irgendwelche Vorschläge?

Aktualisieren:

Das Skript, das ich geschrieben habe (bitte beachten Sie, dass ich den Dateinamen geändert habe, jetzt lautet er /bin/wallch. Außerdem habe ich die Kommentarzeilen entfernt, die mit #„except the shebang“ beginnen):

#!/bin/sh
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC

Die stat /bin/wallchAusgabe:

user@user-Ubuntu:~$ stat /bin/wallch
File: `/bin/wallch'
Size: 484           Blocks: 8          IO Block: 4096   regular file
Device: 806h/2054d  Inode: 130389      Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-02-26 11:03:01.727198732 -0600
Modify: 2013-02-26 10:37:46.727135926 -0600
Change: 2013-02-26 11:02:06.215196433 -0600
Birth: -
user@user-Ubuntu:~$ 

Danke für alle Antworten!

Antwort1

Ja, Sie können jedes MTA-Paket installieren. Wenn Sie bereits irgendwo einen SMTP-Server (MTA) haben, den Sie verwenden können, wählen Sie nullmailer. Andernfalls können Sie auch postfix(erfordert etwas Arbeit) oder courier-mtaverwenden, das auch vernünftige Standardeinstellungen bietet (und meiner Meinung nach für Anfänger etwas einfacher ist).

Die oben genannten Namen mit fester Breite sind Paketnamen unter Ubuntu. Damit apt-get install <packagename>wird der MTA installiert. Das Hauptproblem scheint zu sein, dass Sie keinen MTA konfiguriert haben und daher cronkeine E-Mails senden können. Der Job selbst weist meines Wissens nach keinen Fehler aus der Protokollausgabe auf.

Randbemerkung: Sie können auch die gesamte Ausgabe Ihrer Jobs unterdrücken, indem Sie (an die Jobzeile) Folgendes anhängen:

> /dev/null 2>&1

... und unterdrücken Sie sogar Fehler-Exit-Codes, indem Sie (weiter) anhängen:

|| /bin/true

... Ich würde es jedoch nicht empfehlen. Auch die Einstellung MAILTOin Ihrem crontab(siehe man 5 crontab) ist hier eine weitere Option. Aber es ist irgendwie „global“ für das jeweilige crontab:

MAILTO=""

Was cronper E-Mail gesendet wird, ist die Ausgabe (stdout/stderr, wenn ein MTA gefunden wird) des ausgeführten Jobs. Und das tut es standardmäßig, ja. Auch Fehler-Exit-Codes (ungleich Null) führen dazu, dass die Ausgabe per E-Mail gesendet wird.

Allerdings muss es auch in der Lage sein, den Job auszuführen, was in jedem Fall erfordert, dass die Datei ausführbar ist ( chmod a+x ...) oder dass Sie im Fall eines Skripts den Pfad zum Skriptinterpreter voranstellen und dass im Fall eines Skripts am Anfang der Datei eine entsprechende Hashbang-Zeile vorhanden ist.

Antwort2

verwenden Sie stattdessen diese Cron-Zeile

* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh

könnte auch */2 in der Stundenspalte verwenden für eine Hintergrundänderung alle zwei Stunden (alle geraden Stunden)

Offtopic-Tipp: Dies ist keine Regel, sondern nur eine Möglichkeit, die Skripte auseinanderzuhalten. Verwenden Sie es /usr/local/binfür Ihre Admin-Skripte. :)

verwandte Informationen