%20einfacher%20gemacht%20werden%3F.png)
Ich verwende Nginx, FCGI und Request Tracker auf einem Debian-Jessie-Server. Request Tracker wird von Nginx bedient, aber FCGI sitzt dazwischen. Wichtig ist, dass der FCGI-Server manchmal ausfällt, was dazu führt, dass RT-Benutzer einen 502-Fehler sehen. Die Lösung ist recht einfach, aber nur, weil ich sie im letzten Monat oder so unzählige Male gemacht habe. Wenn ich nicht da bin und jemand anderes den FCGI-Server neu starten muss, kann es sein, dass er Schwierigkeiten hat. Außerdem ist das Anhalten und Neustarten des Servers lästig, aber Sie müssen es tun, um Änderungen an RT anzuwenden.
Das alles führt mich zu folgender Frage: Wie kann ich die Befehle am besten einfacher machen? Ein Skript? Ein Dienst, in dem er lebt /etc/init.d
? Etwas anderes? Ich bin neu bei Debian und Linux im Allgemeinen, kenne also meine Optionen nicht wirklich und weiß auch nicht, wie aufwändig jede davon sein könnte. Hier sind die Befehle, die Sie eingeben müssen:
netstat -antp | grep LIST | grep 12345
(Dadurch wird der an Port 12345 gebundene FCGI-Server gefunden, sodass ich die PID abrufen kann. Angenommen, unsere PID ist 8091.)
kill 8091
spawn-fcgi -u someUser -g someGroup -a 127.0.0.1 -p 12345 /opt/rt4/sbin/rt-server.fcgi
Ein wichtiger Hinweis hier ist, dass der netstat
Befehl nichts zurückgeben könnte. Wenn dies der Fall ist, ist der FCGI-Server stillschweigend ausgefallen. Sie überspringen also den kill
Befehl und gehen direkt zu dem spawn-fcgi
einen. Andernfalls behalten Sie den kill
Befehl bei.
Idealerweise hätte ich gerne Start-/Stopp-/Neustartoptionen für so etwas wie /etc/init.d/rt-fcgi-server
. Ich habe allerdings keine Ahnung, wie ich den Prozess beenden soll, da ich zuerst die PID finden muss. Ich habe überlegt, eine .pid
Datei zu verwenden, aber ich weiß nicht, wie ich eine verwenden soll und was ich mit einer solchen Datei machen soll, selbst wenn ich sie hätte. Ich weiß nicht einmal, ob es das bewirken würde, was ich will (die PID behalten, damit ich den Befehl spawn-fcgi
nicht verwenden muss ).netstat
Ich hoffe, das ist alles verständlich. Ich möchte im Grunde einen Befehl oder etwas, das an gebunden ist /etc/init.d
, um das Ergebnis des spawn-fcgi
Befehls zu steuern. Ich möchte, dass sich Nicht-Root-Benutzer, die noch weniger über Linux wissen als ich, anmelden und einen einzelnen Befehl ausführen können, und ich hätte nichts dagegen, den Status dieses Prozesses abzufragen, ohne zu verwenden netstat
, selbst wenn ich die PID nicht abrufen muss, um ihn zu beenden. Auf diese Weise kann ich etwas wie Monit verwenden, um den Server automatisch neu zu starten, falls er ausfällt.
Antwort1
Ich werde diese Antwort aus der Perspektive von FreeBSD schreiben, sie sollte aber auch auf Linux und Debian anwendbar sein … Paketnamen usw. können sich ändern.
Ähnlich unzufrieden war ich mit spawn-fcgi. Unter FreeBSD verfügt es über ein rc.d-Skript, das sich aber nicht an die rc.d-Regeln hält (es kann beispielsweise nicht „neu starten“).
Unten im Handbuch zu spawn-fcgi wird jedoch Supervise erwähnt. Nach einigem Suchen fand sich „daemontools“ ... Unter FreeBSD gab es Pakete für daemontools und daemontools-encore. -encore schien neuer zu sein und mehr Funktionen zu bieten, also habe ich es gewählt. Meine Version ist 1.10_1 von daemontools-encore.
Unter FreeBSD wird für svscan ein rc.d-Skript bereitgestellt. Unter FreeBSD durchsucht dieses /var/service nach Unterverzeichnissen und führt für jedes Unterverzeichnis eine „Überwachung“ aus. Ich habe diese Standardkonfiguration akzeptiert und svscan_enable="YES"
in /etc/rc.conf eingefügt. Unter Linux weiß ich nichts über das rc-Skript, aber dort steht, dass /service das Standardverzeichnis ist.
Innerhalb von /var/service habe ich rt-fcgi erstellt und innerhalb von rt-fcgi habe ich run erstellt. „run“ enthält:
#!/bin/sh
spawn-fcgi -u www -g www -s /tmp/rt.sock -n -- /usr/local/sbin/rt-server.fcgi
Unter Linux müssen hierfür natürlich der von Ihnen verwendete Benutzer und die Gruppe sowie der Speicherort Ihrer rt-server.fcgi angegeben werden.
Das svscan-System scheint die letzten Fehlerzeilen in einem Prozesstitel anzuzeigen. Es gibt noch andere Optionen. Meine sieht so aus:
46495 - IJ 0:00.01 /usr/local/bin/readproctitle service errors: ...tory (/var/run/rt44/data/gpg). GnuPG support has been disabled (/usr/local/lib/perl5/site_perl/RT/Config.pm:790)\n[52465] [Tue Mar 7 21:09:54 2017] [warning]: The requested port (443) does NOT match the configured WebPort (80). Perhaps you should Set($WebPort, 443); in RT_SiteConfig.pm, otherwise your internal hyperlinks may be broken. (/usr/local/lib/perl5/site_perl/RT/Interface/Web.pm:1328)\n
... das heißt, ich habe gnupg nicht richtig konfiguriert. Scheint, als ob Sie dort nach Fehlern und dergleichen suchen könnten, es sei denn, Sie konfigurieren das Protokoll für svscan.
Das ist ein ziemlich schwerfälliges Teil für ein FCGI, aber es ist vorgefertigt und funktioniert. Es kümmert sich um das Beenden des Skripts aus irgendeinem Grund, aber es verwaltet weder eine PID-Datei noch den Socket (außer der Erstellung der Socket-Datei).
Ich muss sagen, dass ich vom WSGI-Standard viel mehr angetan bin als von diesem Durcheinander.