3 Stimmen

Prüfen Sie, ob der mit twistd gestartete Twisted Server erfolgreich gestartet wurde

Ich brauche eine zuverlässige Methode, um zu überprüfen, ob ein Twisted-basierter Server, der über twistd (und eine TAC-Datei) gestartet wurde, erfolgreich gestartet wurde. Es kann fehlschlagen, weil einige Netzwerkoptionen falsch eingestellt sind. Da ich nicht auf das twistd-Protokoll zugreifen kann (da es in /dev/null protokolliert wird, weil ich die log-clutter twistd erzeugt), muss ich herausfinden, ob der Server erfolgreich in einem Launch-Skript gestartet wurde, das den twistd-Aufruf umschließt.

Das Start-Skript ist ein Bash-Skript wie dieses:

#!/usr/bin/bash
twistd \
  --pidfile "myservice.pid" \
  --logfile "/dev/null" \
  --python \
  myservice.tac

Alles, was ich im Netz gefunden habe, sind einige Hacks mit ps oder ähnlichem . Aber ich mag einen solchen Ansatz nicht, weil ich ihn nicht für zuverlässig halte.

Also denke ich darüber nach, ob es eine Möglichkeit gibt, auf die Interna von Twisted zuzugreifen, und alle derzeit laufenden Twisted-Anwendungen zu erhalten? Auf diese Weise könnte ich die aktuell laufenden Anwendungen nach dem Namen meiner zu startenden Twisted-Anwendung (wie ich sie in der TAC-Datei benannt habe) abfragen.

Ich denke auch darüber nach, nicht die ausführbare Datei twistd zu verwenden, sondern ein Python-basiertes Startskript zu implementieren, das den twistd-Inhalt enthält, etwa die Antwort auf diese Frage gibt aber ich weiß nicht, ob mir das hilft, den Status des Servers zum Laufen zu bringen.

Meine Frage ist also nur: gibt es einen zuverlässigen und nicht hässlichen Weg, um festzustellen, ob ein mit twistd gestarteter Twisted Server erfolgreich gestartet wurde, wenn twistd-logging deaktiviert ist?

5voto

Jean-Paul Calderone Punkte 46659

Sie geben explizit eine PID-Datei an. twistd wird seine PID in diese Datei schreiben. Sie können das System überprüfen, um zu sehen, ob es einen Prozess mit dieser PID gibt.

Sie können die Protokollierung auch mit einem benutzerdefinierten Protokollbeobachter wieder aktivieren, der nur Ihr Startereignis protokolliert und alle anderen Protokollmeldungen verwirft. Dann können Sie das Protokoll auf das Startereignis überwachen.

Eine andere Möglichkeit besteht darin, einen weiteren Server zu Ihrer Anwendung hinzuzufügen, der die von Ihnen erwähnten Interna offenlegt. Versuchen Sie dann, sich mit diesem Server zu verbinden und zu sehen, was Sie sehen wollten (allein die Tatsache, dass der Server läuft, scheint ein guter Hinweis darauf zu sein, dass der Prozess ordnungsgemäß gestartet wurde). Wenn Sie ihn zu einem Manhole-Server machen, erhalten Sie die Möglichkeit, beliebigen Python-Code auszuwerten, wodurch Sie jeden beliebigen Zustand des Prozesses untersuchen können.

Sie können Ihren Anwendungscode auch einfach eine zusätzliche Statusdatei schreiben lassen, die explizit den erfolgreichen Start anzeigt. Stellen Sie sicher, dass Sie diese Datei vor dem Start der Anwendung löschen und Sie haben einen guten Indikator für Erfolg und Misserfolg.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X