Starten Sie das Python-Skript mit cron und geben Sie den Ausdruck in eine Datei aus [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Richtiger Weg, um eine Zeile in eine Datei zu schreiben? 10 AntwortenIch starte ein Python-Skript mit cron wie folgt:
#Python script called every 3 minutes in case script crashes
*/3 * * * * /home/ubuntu/python_script.sh &
Und mein Skript hat mehrere Drucke zum Debuggen. Ich möchte diese Nachrichten in eine Datei drucken, zum Beispiel /home/ubuntu/Logs.txt
Mein Skript überprüft auch, ob der Python-Aufruf bereits ausgeführt wird, damit er nicht erneut gestartet wird:
#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)
if [ $lines -ne 2 ]; then
python python_script.py &
fi
Wie drucke ich meine Nachrichten in diese Datei? Ich benutze Python 2.7
Update: Bearbeitet meinen Code mit den folgenden:
1) Fügte dies als erste Zeile meines Python-Skripts hinzu:
from __future__ import print_function
2) Öffnen Sie die Protokolldatei nach dem letzten Import und fügen Sie direkt danach einen Testdruck hinzu:
log = open("/home/ubuntu/Logs.txt", "w+")
print("Testing...", file = log)
Wenn ich es einfach vom Terminal aus starte, druckt es in die Datei fein. Aber wenn ich es mit cron plane, schreibt es nicht in die Datei.
Update 2: Stolperte über eine Lösung mit "Logger" -Befehl. In meinem Shell-Skript musste ich "2> & 1" (im Shell-Skript nicht crontab, wie von ElmoVanKielmo beschrieben) und "| logger &" hinzufügen. Die endgültige Lösung sieht folgendermaßen aus:
#!/bin/bash
lines=$(ps -ef | grep python_script.py | wc -l)
if [ $lines -ne 2 ]; then
python python_script.py 2>&1 | logger &
fi
und es gibt alle Drucke in die Datei / var / log / syslog aus, was für mich gut genug ist.