Ich versuche, einen Resque-Worker als Upstart-Init-Skript einzurichten, das von Monit in einer Rails-App verwendet wird. Ich bin kein Sysop und habe versucht, dies anhand von Beispielen aus einem anderen Init-Skript zu schreiben, das wir auf unserem Server haben. Folgendes habe ich:
start on startup
stop on shutdown
pre-start script
cd /var/www/my-app/current
end script
script
exec bundle exec rake environment resque:work RAILS_ENV=staging PIDFILE=/var/run/resque.pid QUEUE=sync >> /var/log/resque.log
end script
Aber es funktioniert nicht, wenn ich es versuche, sudo start resque
bekomme ich:
resque start/running, process XXXX
Soweit ich weiß, wird nichts gestartet, es ist weder ein Resque-Prozess noch eine Protokolldatei zu finden. Ich bin ziemlich verloren, wie ich es zum Laufen bringen kann.
Update : Ich habe die Syslog-Datei gefunden und sie lautet:
Nov 4 17:20:09 fantasysports init: resque main process (3057) terminated with status 2
Update : Ich habe versucht, es mit sudo auszuführen (ja, das macht keinen Sinn!) Und die Ausgabeumleitung in die Protokolldatei entfernt. Jetzt erhalte ich einen anderen Statuscode:
Nov 4 17:29:44 fantasysports init: resque main process (3276) terminated with status 10
Update : Am Ende wurde Upstart für init.d eingestellt, da dies start-stop-daemon
viel besser dokumentiert ist und ich die vollständige Kontrolle darüber habe, was los ist.
exec echo 'cd /home/user ; RAILS_ENV=production bundle exec ....' | sudo -u user -i bash
Vielleicht möchten Sie sich Foreman ansehen: http://ddollar.github.com/foreman/, das zum Upstart exportiert werden kann und für die Verwaltung von Resque-Mitarbeitern in einer Reihe von Posts empfohlen wird, darunter: http: // michaelvanrooijen .com / articles / 2011/06/08-Verwalten und Überwachen Ihrer Ruby-Anwendung mit Vorarbeiter und Emporkömmling /
quelle
Das RVM-Handbuch im Abschnitt "Integration" empfiehlt für die Verwendung von RVM- und Ruby-basierten Diensten, die über init.d oder upstart gestartet werden , die Verwendung von RVM-Aliasen und -Wrappern.
Ich hatte eine Situation, in der ich einen
bluepill
Prozess überwachen musste . Dieser Prozess ist ein Daemon, also ein Prozess, der sich zweimal teilt. Das Starten mit demrvm-shell
Befehl fügte eine dritte Verzweigung hinzu ... Dies führte dazu, dass Upstart den Prozess nicht verfolgen konntePID
( es kann Prozesse maximal nur bis zur zweiten Verzweigung verfolgen - wenn dieexpect daemon
Zeilengruppe angegeben ist ).Ich habe das folgendermaßen gelöst:
Zuerst habe ich einen RVM-Alias für meine Umgebung erstellt:
rvm alias create my_app ruby-2.0.0-p247@my_app
Dann habe ich die folgende Upstart-Konfiguration für meinen Job verwendet:
`# /etc/init/bluepill_my-app.conf
`
Bundler muss in dem angegebenen Gemset installiert sein, auf das der RVM-Alias verweist.
Das Aufrufen des
bundler
Wrapper-Skripts verursacht keine Gabeln wie derrvm-shell
Befehl.Eine Alternative könnte darin bestehen,
bluepill
das Gem im verwendeten Gemset zu installieren , ein Wrapper-Skript dafür zu erstellen und es direkt ohne das Bundle Exec zu verwenden - genau wie es das RVM-Handbuch vorschlägt -, aber wenn Sie es über verwenden,bunlder
können die Bluepill-.pill
Dateien jede in my verwendete Bibliothek verwenden -app (wiesetingslogic
etc.).Das ist ein bisschen vom Thema abgekommen, aber ich denke, es ist ein gutes Beispiel, wie man es besser macht. Ich hoffe das hilft.
quelle