2010-10-06 8 views
42

Pracuję nad scenariuszem Boga, który monitoruje moje jednorożce. Zacząłem od skryptu przykładów GitHub i modyfikowałem go, aby pasował do mojej konfiguracji serwera. Gdy Bóg już działa, polecenia takie jak god stop unicorn i god restart unicorn działają dobrze.Używanie Boga do monitorowania jednorożca - Rozpocznij wyjście z niezerowym kodem = 1

Jednak god start unicorn skutkuje WARN: unicorn start command exited with non-zero code = 1. Dziwne jest to, że jeśli skopiuję skrypt startowy bezpośrednio z pliku konfiguracyjnego, zaczyna się on jak nowiutki mustang.

To moja komenda start:

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

I zadeklarowały wszystkie ścieżki bezwzględne w pliku konfiguracyjnym. Jakieś pomysły, które mogą uniemożliwić działanie tego skryptu?

Odpowiedz

14

Nie używałem jednorożec jako serwer aplikacji, ale Użyłem bogu za monitorowanie wcześniej.

Jeśli dobrze pamiętam po uruchomieniu Boga i dać swój plik konfiguracyjny, to automatycznie zaczyna cokolwiek powiedziałem go oglądać. Unicorn prawdopodobnie już działa, dlatego właśnie rzuca błąd.

Sprawdź to uruchamiając god status raz zacząłeś Boga. Jeśli to nie jest przypadek, można sprawdzić w wierszu poleceń co status wyjścia COMAND jest:

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

że echo zostanie wydrukowany kod zakończenia ostatniego polecenia. Jeśli wynosi zero, ostatnie polecenie nie zgłosiło żadnych błędów. Spróbuj uruchomić jednorożca dwa razy z rzędu, spodziewam się, że po raz drugi wróci 1, ponieważ już działa.

EDIT:

tym rzeczywistego rozwiązania z uwagi, jak to wydaje się być popularnym odpowiedź:

Można ustawić wyraźne użytkowników i grup, jeśli proces wymaga do uruchomienia jako konkretnego użytkownika.

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

    # remainder of config 
end 
+0

Ciekawe ... to była naprawdę dobra sugestia. Użyłem dodania echa, aby odczytać wyjście poleceń start i stop, gdy wykonywane są poza boga. Oboje zakończyli pracę z wartością "0". Jednakże, gdy identyczne polecenia są wykonywane przez boga, kończy się on wartością '1'. Wszystkie procesy mają zacząć się jako root ... zarówno bóg, jak i jednorożce. Zastanawiam się, czy istnieje tutaj ogólny błąd uprawnień. Czy to wydaje się wiarygodną odpowiedzią? – mindtonic

+1

Wygląda na to, że chociaż bóg działa jako root, to może wykonywać polecenie jako inny użytkownik? Wygląda na to, że możesz ustawić boga użytkownika, który uruchamia polecenia przez: God.watch do | w | ... w.uid = 'root' w.gid = 'root' ... koniec – Jeremy

0

Mój problem polegał na tym, że nigdy nie byłam w pakiecie jako root. Oto co zrobiłem:

sudo bash 
cd RAILS_ROOT 
bundle 

wyświetlone ostrzeżenie z informacją, aby nigdy to zrobić:

Nie uruchamiaj Bundler jako root. Bundler może poprosić o sudo, jeśli jest to potrzebne, i instalując pakiet jako root złamie tę aplikację dla wszystkich użytkowników innych niż root na tym komputerze.

Ale to był jedyny sposób, w jaki mogłem zdobyć resque lub jednorożca, aby biec z bogiem. To było na instancji EC2, jeśli to pomaga każdemu.

0

Dodaj opcję dziennika pomógł mi znacznie w debugowaniu.

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

    # remainder of config 
end 

W końcu, mój błąd, okazało się być start_script w Boga została wykonana w development środowiska.Naprawiłem to, dołączając RAILS_ENV do skryptu startowego.

start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C#{config_file} -L #{log_file} -d" 
Powiązane problemy