2010-10-06 6 views
42

Ich arbeite an einem Gott-Skript, um meine Unicorns zu überwachen. Ich habe mit GitHubs Beispielskript begonnen und es so modifiziert, dass es meiner Serverkonfiguration entspricht. Sobald Gott läuft, funktionieren Befehle wie god stop unicorn und god restart unicorn gut.Mit Gott Unicorn zu überwachen - Start beendet mit Nicht-Null-Code = 1

jedoch god start unicorn Ergebnisse in WARN: unicorn start command exited with non-zero code = 1. Der komische Teil ist, dass, wenn ich das Startskript direkt aus der Konfigurationsdatei kopiere, es direkt wie ein brandneuer Mustang beginnt.

Das ist mein Startbefehl:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D 

ich erklärt haben alle Pfade als absolute in der Konfigurationsdatei. Irgendwelche Ideen, die verhindern könnten, dass dieses Skript funktioniert?

Antwort

14

Ich habe kein Einhorn als App-Server verwendet, aber ich habe Gott für die Überwachung verwendet.

Wenn ich mich recht erinnere, wenn Sie beginnen, Gott und geben Sie Ihre Konfigurationsdatei, startet es automatisch, was Sie ihm gesagt haben, zu sehen. Unicorn läuft wahrscheinlich schon, weshalb es den Fehler verursacht.

Überprüfen Sie dies, indem Sie god status starten, sobald Sie Gott begonnen haben. Wenn das nicht der Fall ist können Sie auf der Kommandozeile überprüfen, was den Exit-Status des comand ist:

/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D; echo $?;

, die den Exit-Status des letzten Befehls drucken Echo. Wenn es Null ist, hat der letzte Befehl keine Fehler gemeldet. Versuche das Einhorn zweimal hintereinander zu starten, ich erwarte das zweite Mal, dass es 1 zurückgibt, weil es bereits läuft.

EDIT:

die eigentliche Lösung von Kommentaren einschließlich, da dies scheint eine beliebte Antwort auf sein:

Sie können eine explizite Benutzer- und Gruppen gesetzt, wenn der Prozess als einen bestimmten Benutzer ausgeführt werden muss.

God.watch do |w| 
    w.uid = 'root' 
    w.gid = 'root' 

    # remainder of config 
end 
+0

Interessant ... das war ein wirklich guter Vorschlag. Ich habe die Echo-Addition verwendet, um die Ausgabe der Start- und Stoppbefehle zu lesen, wenn sie außerhalb von Gott ausgeführt wurden. Beide gingen mit einem Wert von "0" aus. Wenn jedoch identische Befehle von god ausgeführt werden, wird es mit einem Wert von "1" beendet. Alle Prozesse sollen als Wurzel beginnen ... sowohl Gott als auch die Einhörner. Ich frage mich, ob es hier einen übergreifenden Berechtigungsfehler gibt. Scheint das eine plausible Antwort? – mindtonic

+1

yeah klingt wie, obwohl gott als root läuft, könnte es den Befehl als ein anderer Benutzer ausführen? Sieht aus, als könntest du den Benutzer gott setzen, der die Befehle wie folgt ausführt: God.watch do | w | ... w.uid = 'root' w.gid = 'root' ... Ende – Jeremy

0

Mein Problem war, dass ich nie als root gebündelt. Hier ist, was ich getan habe:

sudo bash 
cd RAILS_ROOT 
bundle 

Sie erhalten eine Warnung, sagen Sie nie tun:

nicht Bündler als root ausführen. Bundler kann nach sudo fragen, wenn es benötigt wird, und die Installation Ihres Bundles als root bricht diese Anwendung für alle Nicht-root-Benutzer auf diesem Rechner ab.

Aber es war der einzige Weg, wie ich Resque oder Einhorn bekommen konnte, um mit Gott zu laufen. Dies war auf einer ec2-Instanz, wenn das irgendjemandem hilft.

0

Fügen Sie die Protokolloption hat mir sehr geholfen, in der Fehlersuche.

God.watch do |w| 
    w.log = "#{RAILS_ROOT}/log/god.log" 

    # remainder of config 
end 

Am Ende drehte mein Fehler die start_script in Gott erwiesen wurde in development Umgebung ausgeführt.Ich habe das behoben, indem ich die RAILS_ENV an das Startskript angehängt habe.

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C#{config_file} -L #{log_file} -d" 
Verwandte Themen