Wie kann man die Ausgabe eines Upstart-Skripts an ein Terminal senden, um Tracebacks im Python-Code zu finden? Ich brauche eine Ewigkeit, um Dinge zu tun, die keine Rückverfolgung erfordern und früher nur eine Sekunde gedauert haben. Ich muss mehrere Aufrufe zum Schreiben von Dateien ausführen, um Fehler aufzuspüren. Was zuvor mit einem Traceback in Sekundenschnelle gefunden wurde, ist, dass es sich um einige Minuten Minuten handelt. Das ist miserabel. Das geht jetzt schon ein paar Wochen so und ich habe es satt. Würden sich bitte einige dazu äußern? Ich habe das Gefühl, dass ich wieder Assembly ohne Debugger verwende.
16
/var/log/upstart
. Wirklich nützlich, danke.Es gibt einen ganzen Abschnitt über Debugging-Techniken im Upstart-Kochbuch . Das Einfachste, was Sie tun können, ist
--debug
, Ihre Kernel-Argumente zu erweitern, was die Ausführlichkeit von upstart erhöht und alles in syslog ablegt. Ja, das Debuggen ist komplex und spiegelt die Netzkomplexität wider, die zum Erstellen eines parallelisierten Init-Systems erforderlich ist. Ich bin sicher, es gibt Raum für Verbesserungen.quelle
Wenn ich einen Python-Daemon schreibe, fange ich alle Ausnahmen ab und werfe sie dann in die Protokolldatei. Ich benutze es nicht nur zum Debuggen, sondern auch in der Produktion. Ich habe ein kleines Skript, das ich jeden Morgen ausführe und das nach Störungen in den Protokollen sucht.
Es hilft natürlich auch dabei, den Daemon am Laufen zu halten.
Einige Beispielcodes (ich entferne die nicht interessanten Teile):
Wobei actua () der eigentliche Daemon ist (er schreibt auch, um zu protokollieren). Beachten Sie, dass ich auch eine DEBUG-Variable in einer Einstellungsdatei habe. Wenn dies der Fall ist, wird der Dämon nicht gegabelt, sodass er auf der Konsole ausgeführt wird.
Daemons
Daemons sind das Unix-Äquivalent zu Windows-Diensten. Dies sind Prozesse, die unabhängig von anderen Prozessen im Hintergrund ausgeführt werden. Das bedeutet, dass ihr Vater normalerweise init ist und dass sie sich von jedem tty lösen. Da sie unabhängig sind, gibt es keinen vordefinierten Ort für die Ausgabe.
Es gibt viele Python-Bibliotheken und Snippets, um einen Daemon zu erstellen. Im obigen Beispiel verwende ich meine eigene Funktion, die einige Ideen aus den Versionen von Steinar Knutsens und Jeff Kunces kombiniert. Es ist so einfach wie möglich, beachte, dass ich zweimal gabele .
quelle