El archivo PID para un proceso de ruby que estoy ejecutando como demonio está recibiendo el PID incorrecto. Parece que la ejecución /etc/init.d/sinatra start
se crean dos procesos - sh
y ruby
, y el PID que termina en el archivo PID es el del sh
proceso. Esto significa que cuando ejecuto /etc/init.d/sinatra stop
o /etc/init.d/sinatra restart
, está matando sh y dejando el proceso de ruby todavía ejecutándose.
Me gustaría saber a) por qué mi script inicia dos procesos: sh y ruby, y no solo ruby, y b) ¿cómo lo soluciono para simplemente iniciar ruby?
Detalles de la configuración:
Tengo un pequeño servidor Sinatra configurado en un servidor ubuntu, que se ejecuta como un demonio. Se establece en forma automática al arrancar el servidor ejecutar un script llamado sinatra
en /etc/init.d
la que se lanza el script de un control control.rb
, que luego se ejecuta un comando de rubí daemon para iniciar el servidor. El script se ejecuta bajo la cuenta 'sinatrauser', que tiene permisos para los directorios que necesita el script.
contenido de /etc/init.d/sinatra
#!/bin/bash
# sinatra Startup script for Sinatra server.
sudo -u sinatrauser ruby /var/www/sinatra/control.rb $1
RETVAL=$?
exit $RETVAL
Para instalar este script, simplemente lo copié /etc/init.d/
y ejecuté
sudo update-rc.d sinatra defaults
contenido de /var/www/sinatra/control.rb
require 'rubygems'
require 'daemons'
pwd = Dir.pwd
Daemons.run_proc('sinatraserver.rb', {:dir_mode => :normal, :dir => "/opt/pids/sinatra"}) do
Dir.chdir(pwd)
exec 'ruby /var/www/sinatra/sintraserver.rb >> /var/log/sinatra/sinatraOutput.log 2>&1'
end
porción de salida de ps -A
6967 ? 00:00:00 apache2
10181 ? 00:00:00 sh <--- PID file gets this PID
10182 ? 00:00:02 ruby <--- Actual ruby process running Sinatra
12172 ? 00:00:00 sshd
El archivo PID se crea /opt/pids/sinatra/sinatraserver.rb.pid
y siempre contiene el PID de la instancia sh, que siempre es uno menos que el PID del proceso ruby
EDITAR: probé la solución de micke, pero no tuvo ningún efecto en el comportamiento que estoy viendo.
Esta es la salida de ps -A f
. Este resultado se ve igual si uso sudo -u sinatrauser ...
o su sinatrauser -c ...
en el script de inicio del servicio en /etc/init.d.
1146 ? S 0:00 sh -c ruby /var/www/sinatra/sinatraserver.rb >> /var/log/sinatra/sinatraOutput.log 2>&1
1147 ? S 0:00 \_ ruby /var/www/sinatra/sinatraserver.rb