2010-10-06 12 views
42

Sto lavorando a uno script di God per monitorare i miei unicorni. Ho iniziato con lo script degli esempi di GitHub e lo ho modificato per adattarlo alla configurazione del mio server. Una volta che Dio è in esecuzione, comandi come god stop unicorn e god restart unicorn funzionano perfettamente.Uso di God per monitorare Unicorn - Inizio uscito con codice diverso da zero = 1

Tuttavia, god start unicorn risultati in WARN: unicorn start command exited with non-zero code = 1. La parte strana è che se copio lo script di avvio direttamente dal file di configurazione, esso inizia come un mustang nuovo di zecca.

Questo è il mio comando di avvio:

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

ho dichiarato tutti i percorsi come assoluta nel file di configurazione. Qualche idea su cosa potrebbe impedire il funzionamento di questo script?

risposta

14

Non ho usato unicorno come un server di app, ma ho usato dio per il monitoraggio prima.

Se ricordo bene quando si avvia dio e si fornisce il file di configurazione, esso avvia automaticamente tutto ciò che gli hai detto di guardare. L'unicorno è probabilmente già in esecuzione, motivo per cui sta lanciando l'errore.

Controllare questo eseguendo god status una volta che hai iniziato dio. Se questo non è il caso si può controllare sulla linea di comando che cosa stato di uscita del COMAND è:

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

che ECHO stampare lo stato di uscita dell'ultimo comando. Se è zero, l'ultimo comando non ha segnalato errori. Prova ad avviare unicorno due volte di seguito, mi aspetto che la seconda volta restituisca 1, perché è già in esecuzione.

EDIT:

tra cui la soluzione reale dai commenti, in quanto questo sembra essere una risposta popolare:

È possibile impostare una esplicita dell'utente e del gruppo se il processo richiede di essere eseguito come un utente specifico.

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

    # remainder of config 
end 
+0

Interessante ... questo è stato davvero un buon suggerimento. Ho usato l'aggiunta dell'eco per leggere l'output dei comandi start e stop quando eseguito al di fuori di dio. Entrambi sono usciti con un valore di '0'. Tuttavia, quando i comandi identici sono eseguiti da dio, esce con un valore di '1'. Tutti i processi dovrebbero iniziare come root ... sia dio che unicorni. Mi chiedo se ci sia un errore di permessi sovraordinato qui. Sembra una risposta plausibile? – mindtonic

+1

sì sembra come se dio è in esecuzione come root, potrebbe essere in esecuzione il comando come un altro utente? Sembra che tu possa impostare l'utente che dio esegue i comandi come tramite: God.watch do | w | ... w.uid = 'radice' w.gid = 'radice' ... fine – Jeremy

0

Il mio problema era che non ho mai messo in bundle come root. Ecco quello che ho fatto:

sudo bash 
cd RAILS_ROOT 
bundle 

viene visualizzato un avviso che ti dice di non farlo:

Non eseguire Bundler come root. Bundler può chiedere sudo se è necessario, e l'installazione del pacchetto come root interromperà questa applicazione per tutti gli utenti non root di su questa macchina.

Ma era l'unico modo per ottenere resque o unicorno per correre con dio. Era su un'istanza di ec2 se questo aiuta qualcuno.

0

Aggiungere l'opzione di registro mi ha aiutato molto nel debug.

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

    # remainder of config 
end 

Alla fine, il mio errore si è rivelato essere il start_script in Dio è stato eseguito in development ambiente.Ho risolto questo problema aggiungendo lo RAILS_ENV allo script di avvio.

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