2010-04-26 9 views
5

Ich habe ein Python-Skript, das den Desktophintergrund über gconf korrekt auf ein zufälliges Bild in einem bestimmten Ordner setzt.Benutzer Crontab + Python + Zufällige Hintergrundbilder = Funktioniert nicht?

Ich habe dann der folgende Eintrag in meiner crontab

* * * * * python /home/bolster/bin/change-background.py

Und syslog meldet korrekt Ausführung

Apr 26 14:11:01 bolster-desktop CRON[9751]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:12:01 bolster-desktop CRON[9836]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:13:01 bolster-desktop CRON[9860]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:14:01 bolster-desktop CRON[9905]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:15:01 bolster-desktop CRON[9948]: (bolster) CMD (python /home/bolster/bin/change-background.py) 
Apr 26 14:16:01 bolster-desktop CRON[9983]: (bolster) CMD (python /home/bolster/bin/change-background.py) 

Aber keine desktopy changey, Irgendwelche Ideen?

+0

Siehst du die Wertänderung in gconf-Editor? Ändert sich das Hintergrundbild, wenn Sie den Wert von gconf-editor setzen? – Thomas

+0

ja und ja, wie ich schon sagte, das Skript funktioniert außerhalb von Cron Aufruf als nur ~/bin/change-background.py und python ~/bin/change-background.py – Bolster

Antwort

6

Ihr Skript hängt von der Umgebungsvariablen DISPLAY ab, die festgelegt wird, wenn Sie das Skript in einer X-Sitzung von der Shell aus ausführen, aber nicht gesetzt, wenn das Skript von cron ausgeführt wird.

+2

Bitte geben Sie Ihre Antwort in Form einer Antwort:) – Bolster

+4

@Andrew ich obwohl ich es tat. Ihre Frage lautete "Irgendwelche Ideen?", Ich habe Ihnen den wahrscheinlichsten Grund gegeben, weil Sie nur begrenzte Informationen zur Verfügung gestellt haben. Ich habe richtig geraten, dass das Problem nicht mit Cron oder Gconf ist, sondern mit einer bestimmten Umgebungsvariablen. Da Sie anscheinend mit * NIX und Python flüssig sprechen, wollte ich Ihnen nicht beibringen, wie man Umgebungsvariablen setzt (für den Datensatz ist es in Python "os.environ [" DISPLAY "] = ...")). – Bolo

2

Nach Bolos Beobachtung habe ich vergessen, im DISPLAY entweder das Skript oder die Crontab zu erstellen.

einfachste Lösung ist, die crontab mit env DISPLAY=:0.0

vorangestellt wird, so:

* * * * * env DISPLAY=:0.0 python /home/bolster/bin/change-background.py 
+1

Dann akzeptiere seine Antwort? – manifest

+0

Ich werde, in 44 Stunden :) – Bolster

+0

Errr, es sei denn, ein Kommentar wurde gelöscht: * sein *, nicht * this *, also keine Notwendigkeit, 44 Stunden zu warten? (Aber gut, das ist [eine Diskussion über Meta] (http://meta.stackexchange.com/questions/47906/etiquette-for-de-aling-with-hint-answers).) – Arjan

2

das DISPLAY-Umgebungsvariable zu setzen, würde ich es ausdrückte direkt in der crontab. Außerdem würde ich das Skript ausführbar machen und ihm einen korrekten Header geben (#!/usr/bin/env python), damit es direkt ausgeführt werden kann. Darüber hinaus können Sie sich darauf verlassen, dass das PWD bei der Ausführung der Crontab auf HOME gesetzt wird.

Meine crontab würde wie folgt aussehen:

DISPLAY=:0.0 
* * * * * bin/change-background.py 

Sie auch den Pfad (in der gleichen Weise wie DISPLAY) eingestellt, so dass die bin/ ist nicht einmal notwendig.


Haupt gotcha für Umwelt in der crontab Einstellung ist, dass die Werte nicht variabler interpoliert werden. Zum Beispiel gibt dies nicht die erwarteten Ergebnisse:

PATH=$HOME/bin:$PATH 
+0

Skript ist ausführbar, hat einen richtigen Header und Pfad ist korrekt eingestellt (ich habe viele Dinge in ~/bin), aber ich mag nur explizite Angabe von was los ist, so dass die 'Export DISPLAY: 0.0' Inline in der Crontab wird erinnern Sie mich, warum es dort in 6 Monaten Zeit ist: D Vielen Dank für Ihr Interesse. – Bolster