Ausführen von Python ist3-Datei mit einem cron-job.
Habe ich ein Python ist3 Skript befindet sich in /home/valence/das bringt die Wettervorhersage für den aktuellen Tag (max und min Temperatur Werte in Grad Celsius) von Yahoo! Wetter-API. Die Datei sieht genau so aus:
#!/usr/bin/python3
from urllib import request
import json
url="https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D349859%20and%20u='c'&format=json&diagnostics=true&callback="
response=request.urlopen(url)
str_response = response.readall().decode('utf-8')
dic = json.loads(str_response)
dic["query"]["results"]["channel"]["location"]["region"]="R.M."
low=dic["query"]["results"]["channel"]["item"]["forecast"][0]["low"]
high=dic["query"]["results"]["channel"]["item"]["forecast"][0]["high"]
forecast=open("forecast.txt", "w+")
forecast.write("Minima: "+str(low)+" Maxima: "+str(high))
forecast.close()
Es funktioniert, wenn ich es ausführen. Es erstellt oder überschreibt die Datei forecast.txt mit den richtigen Werten, aber wenn ich versuche, mit cron ausführen, mit den folgenden cron-job:
* * * * * /home/valence/Get_forecast.py
keine Datei forecast.txt erstellt oder geändert wird.
Also muss ich wissen, was ich falsch mache und wie diese Arbeit zu machen als gedacht. Der cron-job ist nicht dazu gedacht, jede minute ausgeführt (da die Vorhersage für einen Tag bleibt die gleiche während des ganzen Tages), aber jetzt habe ich es auf diese Weise, so kann ich die Veränderungen sehen, ohne zu warten, viel.
Hinweis: ich bin neu auf linux (ich verwende Lubuntu)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Grund, warum Sie nicht bekommen, die Datei
forecast.txt
im Verzeichnis/home/valence
wenn mit crontab-job* * * * * /home/valence/Get_forecast.py
ist, dass der cron nicht ausgeführt wird der Befehl im Verzeichnis/home/valence
und Sie angegeben haben, die Dateiforecast.txt
im relativen Pfad bilden in Ihrem Programm. Damit die Datei erstellt wird woanders.Den erwarteten Datei ausgegeben, können Sie mit dem folgenden crontab-job:
Dieser explizit zugewiesen, wird das aktuelle Arbeitsverzeichnis zu
/home/valence
, und führen Sie das Skript von dort aus.Was mehr ist, wird die Ausgabe von stdout und stderr, fügen Sie die Umleitung ist immer hilfreich, wenn etwas unerwartetes passiert:
Hinweis:
Den beiden vorherigen crontab-job übernimmt Get_forecast.py jexecutable und mit shebang angegeben. Die
./Get_forecast.py
Teil kann immer ersetzt werden mitpython3 Get_forecast.py
oder/usr/bin/python3 Get_forecast.py
um deutlicher zu sein.* * * * * /home/valence/Get_forecast.py
anstatt dass die cd dir und das Skript ausführen?Was für mich gearbeitet, die zum ausführen eines Python ist3 Skript ist der nächste:
Mit
which python3
finden den Pfad zu deiner python-version und fügen Sie dann den Pfad zu deiner Datei.Benutze ich dieses tool, um den Befehl generieren, und normalerweise mache ich so etwas wie
ich denke, dein cronjob ist nicht bei allen läuft Ihr Programm. Weg, ein Programm wie dieses
damit Ihr cronjob wie folgt Aussehen muss.
oder
können Sie alles senden die Ausgänge einen cronjob in eine log-Datei wie folgt.
Ich würde empfehlen, bietet einen absoluten Pfad für die Ausgabe-Datei:
Cron bekommt ein wenig komisch mit Pfaden /Berechtigungen und der Besitz des Skripts, die ausgeführt werden. Lassen Sie mich wissen, wenn die Datei wird erstellt unter /tmp.