Ich richte einen Debian Etch Server ein, um Ruby und PHP Anwendungen mit nginx zu hosten. Ich habe erfolgreich inittab konfiguriert, um den PHP-CGI-Prozess beim Booten mit der Respawn-Aktion zu starten. Nach dem Ausfüllen von 1000 Anfragen, sterben die php-cgi worker Prozesse ab und werden von init erneut gespawnt. Der inittab Datensatz sieht wie folgt aus:Wie verkürzt man einen inittab-Prozesseintrag, a.k.a., wo Umgebungsvariablen platziert werden, die von init gesehen werden?
50:23:respawn:/usr/local/bin/spawn-fcgi -n -a 127.0.0.1 -p 8000 -C 3 -u someuser -- /usr/bin/php-cgi
ich zunächst den Prozess Eintrag geschrieben (alles nach dem 3. Doppelpunkt) in einem separaten Skript (einfach, weil es lange war) und in der inittab Datensatz, die Skriptnamen setzen, sondern weil das Skript laufen würde war seine einzige Zeile und sterben, die syslog mit Fehlern wie folgt gefüllt:
May 7 20:20:50 sb init: Id "50" respawning too fast: disabled for 5 minutes
So wurde ich der Skriptdatei zu befreien und einfach die ganze Zeile in der inittab setzen. Im syslog werden fortan keine Fehler mehr angezeigt.
Jetzt versuche ich das gleiche mit thin, um eine Schienen-Anwendung zu dienen. Ich kann erfolgreich den Thin-Server starten, indem Sie diesen Befehl ausführen:
sudo thin -a 127.0.0.1 -e production -l /var/log/thin/thin.log -P /var/run/thin/thin.pid -c /path/to/rails/app -p 8010 -u someuser -g somegroup -s 2 -d start
Es funktioniert anscheinend genau das gleiche, ob ich die -d (daemonize) Flag verwenden oder nicht. Die Befehlszeilensteuerung kommt sofort zurück (die Prozesse wurden dämonisiert). Wenn ich den ganzen Befehl (minus sudo und mit absoluten Pfaden) in inittab schreibe, beschwert sich init (in syslog), dass der Prozesseintrag zu lang ist, also lege ich die Optionen in eine exportierte Umgebungsvariable in/etc/profile. Jetzt kann ich den Server erfolgreich mit Start:
sudo thin $THIN_OPTIONS start
Aber wenn ich diesen in einem inittab Datensatz mit der Respawn Aktion
51:23:respawn:/usr/local/bin/thin $THIN_OPTIONS start
die Protokolle zeigen deutlich, dass der Umgebungsvariable nicht sichtbar ist zu init; es ist, als ob der Befehl einfach "dünner Anfang" wäre.
Wie kann ich den inittab-Prozesseintrag verkürzen? Gibt es eine andere Datei als/etc/profile, wo ich die Umgebungsvariable THIN_OPTIONS setzen könnte? Meine früheren Erfahrungen mit php-cgi sagen mir, dass ich nicht den gesamten Befehl in ein separates Skript schreiben kann.
Danke - ein Problem, das diese Antwort nicht behandelt, ist das Respawnen des Thin-Servers, wenn/wenn er abbricht. Eine Person müsste sich an diesem Punkt anmelden und manuell starten, was wir bereits tun können. Soweit ich weiß, erlaubt nur inittab das automatische Respawnen. Wenn irgendjemand eine Möglichkeit kennt init zu sagen, init.d Skripte respawnen zu können, würde das auch mein Problem lösen. – towynlin
Vielleicht verzweigen (Sorry) in der Init-Skript in eine Schleife, die den Server wiederholt gestartet, und wenn der Prozess stirbt, startet die Schleife neu und der Server, ad infinitum. –
Nach mehrtägigem Betrieb ist der dünne Prozess nicht abgestorben. Das lässt mich glauben, dass Thin anders funktioniert als entweder (1) der php-cgi-Prozess selbst oder (2) alles begann mit spawn-fcgi (ich bin mir nicht sicher, welches) - inhärent beabsichtigt, nach dem Servieren einer bestimmten Anzahl von zu sterben Anfragen. Bewaffnet mit diesem Wissen glaube ich jetzt, dass ich mich nicht mehr um Respawn kümmern muss, obwohl Aidens Antwort den Job erledigen würde, wenn ich sicherstellen müsste, dass Thin Respawn würde. Ich habe ein sehr einfaches init.d-Skript erstellt, das einfach entweder "Thin Start" oder "Thin Stop" mit den entsprechenden Argumenten aufruft. – towynlin