it-swarm.com.de

So legen Sie Berechtigungen fest, damit der Job von cron ausgeführt wird

Ich habe python Skript, das gut läuft. Ich möchte es alle 10 Minuten als Cron-Job ausführen

Ich habe crontab -e gemacht und die Zeile eingegeben

*/10 * * * * root python /path/to/script/script.py

Es scheint nicht zu laufen.

Also habe ich auf der Kommandozeile herumgespielt und gesehen, an welcher Stelle es nicht mehr läuft. Es läuft in seinem Verzeichnis und in jedem vorhergehenden Verzeichnis, bis ich mein Ausgangsverzeichnis verlasse (dh wenn ich mich in /home/henry/ befinde, läuft es, aber wenn ich mich zum Beispiel in /var befinde, dann ist es nicht), wenn ich beim Versuch, in eine Datei zu schreiben, einen Berechtigungsfehler erhalte.

# save this for next time
with open(mycsvfile, "w") as outfile:
    writer = csv.writer(outfile)
    writer.writerows([s.strip().encode("utf-8") for s in row ]for row in list_of_rows)
outfile.close()

Ich habe bereits chmod +x /home/user/Location/Of/Script ausgeführt, um sicherzustellen, dass das Skript Zugriff hat (dachte ich). Was vermisse ich? Danke für Ihre Hilfe

2
HenryM

Entfernen Sie die Zeichenfolge root (vorausgesetzt, python existiert in cron definiert PATH, andernfalls verwenden Sie den absoluten Pfad, z. B. /usr/bin/python):

*/10 * * * * python /path/to/script/script.py
*/10 * * * * /usr/bin/python /path/to/script/script.py

Warum:

  • Wenn Sie crontab -e zum Öffnen einer Cron-Tabelle verwenden, öffnen Sie das crontab des aufrufenden Benutzers. Ein Feld für den Benutzernamen ist nicht zulässig (im Gegensatz zu /etc/crontab und /etc/cron.d/*).

  • Derzeit führen Sie den Befehl root (der vermutlich nicht verfügbar ist) mit den Argumenten python und /path/to/script/script.py aus.

Wenn Sie das Skript ausführbar gemacht haben, sollten Sie einen Shebang hinzufügen, der den Skriptinterpreter angibt (z. B. /usr/bin/python), anstatt das Skript als Argument für den Interpreter auszuführen. Dann können Sie tun:

*/10 * * * * /path/to/script/script.py
4
heemayl