
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.sh
dorthin. 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/syslog
sagt:
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/wallch
Ausgabe:
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-mta
verwenden, 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 cron
keine 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 MAILTO
in Ihrem crontab
(siehe man 5 crontab
) ist hier eine weitere Option. Aber es ist irgendwie „global“ für das jeweilige crontab
:
MAILTO=""
Was cron
per 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/bin
für Ihre Admin-Skripte. :)