Utilizzando Dio per monitorare Unicorn - Inizia uscito con non-zero codice = 1
-
28-09-2019 - |
Domanda
Sto lavorando su uno script di Dio per monitorare il mio Unicorns. Ho iniziato con lo script esempi di GitHub e sono stati modificandolo per abbinare la mia configurazione del server. Una volta che Dio è in esecuzione, comandi come god stop unicorn
e il lavoro god restart unicorn
bene.
Tuttavia, god start unicorn
si traduce in WARN: unicorn start command exited with non-zero code = 1
. La parte strana è che se mi copia lo script di avvio direttamente dal file di configurazione, si avvia a destra come una nuova Mustang.
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. Tutte le idee che potrebbero impedire questo script di lavorare?
Soluzione
Non ho usato unicorno come un application server, ma ho usato Dio per il monitoraggio di prima.
Se ricordo bene quando si inizia a Dio e dare il vostro file di configurazione, automaticamente si avvia tutto ciò che hai detto che da guardare. Unicorno è probabilmente già in esecuzione, ed è per questo che è gettando l'errore.
Seleziona questa eseguendo god status
volta che hai iniziato a 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 l'eco stamperà lo stato di uscita dell'ultimo comando. Se è pari a zero, l'ultimo comando non ha riportato errori. Prova a partire unicorno due volte di fila, mi aspetto che la seconda volta tornerà 1, perché è già in esecuzione.
EDIT:
compreso la soluzione reale dai commenti, in quanto questo sembra essere una risposta popolare:
È possibile impostare una esplicita dell'utente e di gruppo se il processo richiede di essere eseguito come utente specifico.
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end
Altri suggerimenti
Il mio problema era che non ho mai in bundle come root. Ecco quello che ho fatto:
sudo bash
cd RAILS_ROOT
bundle
Si ottiene un messaggio di avviso che ti dice di non fare questo:
Non eseguire Bundler come root. Bundler può richiedere sudo se è necessario, e l'installazione del pacco da root si romperà questa applicazione per tutti utenti non-root su questa macchina.
Ma era l'unico modo ho potuto ottenere resque o unicorno a correre con Dio. Questo è stato su un'istanza EC2 se questo aiuta nessuno.
Aggiungere l'opzione di log mi ha aiutato molto nella debug.
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end
Alla fine, il mio errore si è rivelata la start_script
in Dio è stato eseguito in un ambiente development
. Ho fissato questo aggiungendo il 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"