El uso de Dios para supervisar unicornio - Inicio salió con no-cero código = 1
-
28-09-2019 - |
Pregunta
Estoy trabajando en un guión de Dios para monitorear mi unicornios. Empecé con la escritura ejemplos de GitHub y han modificado para que coincida con la configuración de mi servidor. Una vez que Dios se está ejecutando, comandos como god stop unicorn
y el trabajo god restart unicorn
bien.
Sin embargo, god start unicorn
resulta en WARN: unicorn start command exited with non-zero code = 1
. La parte extraña es que si copio el script de inicio directamente desde el archivo de configuración, se pone en marcha a la derecha como un nuevo Mustang.
Esta es mi comando de arranque:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D
Me han declarado todos los caminos como absoluta en el archivo de configuración. Alguna idea de lo podrían estar impidiendo que este script funcione?
Solución
No he utilizado unicornio como un servidor de aplicaciones, pero he utilizado para el seguimiento de dios antes.
Si no recuerdo mal cuando se empieza a Dios y darle a su archivo de configuración, automáticamente se inicia lo que he dicho que a ver. Unicornio es probable que ya en funcionamiento, por lo que está lanzando el error.
comprobarlo ejecutando god status
vez que haya comenzado a Dios. Si ese no es el caso, se puede comprobar en la línea de comandos lo que el código de salida del COMAND es:
/usr/local/bin/unicorn_rails -c /home/my-linux-user/my-rails-app/config/unicorn.rb -E production -D;
echo $?;
eco que va a imprimir el estado de salida del último comando. Si es cero, el último comando informa de ningún error. Trate de comenzar unicornio dos veces en una fila, espero que la segunda vez que va a regresar 1, porque ya está en marcha.
EDIT:
incluyendo la solución real a partir de los comentarios, ya que esto parece ser una respuesta popular:
Se puede configurar una explícita del usuario y de grupo si su proceso requiere que se ejecute como un usuario específico.
God.watch do |w|
w.uid = 'root'
w.gid = 'root'
# remainder of config
end
Otros consejos
Mi problema era que nunca he liado como root. Esto es lo que hice:
sudo bash
cd RAILS_ROOT
bundle
Aparece una advertencia que le indica que no hacer esto:
No ejecute Bündler como root. Bundler puede pedir sudo si es necesario, y la instalación de su paquete como root se romperá esta aplicación para todos los usuarios no root en esta máquina.
Pero era la única manera que podría conseguir resque o Unicorn para funcionar con Dios. Esto fue en una instancia EC2 si eso ayuda a nadie.
Añadir la opción de registro me ha ayudado mucho en la depuración.
God.watch do |w|
w.log = "#{RAILS_ROOT}/log/god.log"
# remainder of config
end
Al final, mi error resultó ser el start_script
en Dios fue ejecutado en el entorno development
. He arreglado esto añadiendo el RAILS_ENV
a la secuencia de comandos de inicio.
start_script = "RAILS_ENV=#{ENV['RACK_ENV']} bundle exec sidekiq -P #{pid_file} -C #{config_file} -L #{log_file} -d"