Ich verwende Kubuntu 14.04. Ich habe Cron mit „sudo apt-get install cron“ installiert und dann diese Datei in IDLE erstellt, genannt openurl.py
.
#!/usr/bin/env python
import webbrowser
webbrowser.open('http://eample.com')
Ich habe dann chmod +x openurl.py
in das Terminal eingegeben, um die .py-Datei ausführbar zu machen. Wenn ich in ./openurl.py
das Terminal eingebe, funktioniert das Skript.
Anschließend klickte ich mithilfe des Kickoff-Anwendungsstarters auf „Systemeinstellungen > Aufgabenplaner > Neue Aufgabe“. Anschließend suchte ich nach der Datei openurl.py und wählte aus, wann sie ausgeführt werden sollte.
Wenn ich crontab -e
das ins Terminal eingebe, wird folgendes angezeigt:
#openurl
21 21 * * * /home/craig/openurl.py
# File generated by KCron the Thursday 29 Jan 2015 21:20.
Und dann warte ich und nichts passiert. Was mache ich falsch?
Antwort1
Ich denke, Ihre Cron-Konfiguration ist korrekt. Ich bin mit der Python-Funktion webbrower.open() nicht ganz vertraut, aber ich gehe davon aus, dass Sie erwarten, dass das Python-Skript Ihre Seite in einem sichtbaren Browserfenster öffnet.
Ich denke, was hier passiert, ist, dass das Skript funktioniert, wenn Sie es von der Befehlszeile aus aufrufen, weil es in Ihrer Grafiksitzung ausgeführt wird. Wenn es von Cron aus aufgerufen wird, wird es in einer neuen Sitzung ohne die Hooks in Ihre aktuelle Grafikumgebung ausgeführt, sodass es den Browser nirgends starten kann. Sie können überprüfen, ob das Skript ausgeführt wird, indem Sie es eine Datei mit dem aktuellen Zeitstempel erstellen lassen oder den aktuellen Zeitstempel irgendwo in ein Protokoll schreiben lassen.
Wenn Ihr Hauptziel darin besteht, die Seite einmal täglich zu aktualisieren, können Sie hierfür ein Browser-Plug-In verwenden. Andernfalls müssen Sie das Umgebungsproblem lösen.
Antwort2
Das Problem besteht darin, dass Cron nichts von Ihrer Anmeldesitzung weiß.
Wenn das Skript von der Systemkonsole ( ctrl-alt-f1
) aus nicht funktioniert, funktioniert es auf jeden Fall von cron aus.
Wenn Sie GUI-Aufgaben automatisieren möchten, ist es wahrscheinlich am besten, einen GUI-basierten Dscheduler anstelle von Cron zu verwenden.
Antwort3
Wie Andrew sagte, könnte Ihr Job scheitern, weil er eineX-Sitzung, da Sie versuchen, einen Webbrowser zu öffnen. Sie sollten export DISPLAY=:0;
nach dem Zeitplan in Ihrem Cronjob platzieren, wie in
21 21 * * * export DISPLAY=:0; /home/craig/openurl.py
Wenn dies nicht funktioniert, können Sie versuchen, es :0
durch die Ausgabe echo $DISPLAY
in einem grafischen Terminal zu ersetzen.