2012-02-19 10 views
7

Estoy usando advenedizo para crear un daemon para una secuencia de comandos nginx python fastcgi engendrada. Si utilizo el siguiente funciona:Usando ubuntu advenedizo para detener a un daemon

sudo start myserver 

Lo que no funciona es:

sudo stop myserver 
stop: Unknown instance: 

A continuación es mi archivo de configuración con el comando para detener el proceso. ¿Asumo que el comando para matar a hte proccess está en script pre-stop?

#!upstart 
description "myserver" 
author  "Test" 

start on startup 
stop on shutdown 
respawn 
#instance 

script 
    export HOME="/root" 

    echo $$ > /var/run/myerver.pid 
    exec spawn-fcgi -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 
end script 

pre-start script 
    # Date format same as (new Date()).toISOString() for consistency 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Starting" >> /var/log/myserver.sys.log 
end script 

pre-stop script 
    rm /var/run/myserver.pid 
    sudo kill `sudo lsof -t -i:9001` 
    echo "[`date -u +%Y-%m-%dT%T.%3NZ`] (sys) Stopping" >> /var/log/myserver.sys.log 
end script 
+0

* Nix preguntas son movidos a [superuser.com] (http://superuser.com/) –

Respuesta

8

La mejor manera de manejar esto sería decirle a desovar-fcgi para funcionar en el primer plano, y no en demonio. La página man para spawn-fcgi dice que la opción -n hace esto. A continuación, puede volver a escribir todo este trabajo ya que este advenedizo:

start on runlevel [2345] 
stop on runlevel [016] 
respawn  

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 >> /var/log/myserver.sys.log 2>&1 

Tenga en cuenta que con Upstart 1.4 que ni siquiera necesita la dirección de registro, ya que por defecto es 'registro de la consola', que tendrían toda la salida en/var/log/advenedizo/$ UPSTART_JOB.log .. así ITW ould acaba de ser

start on runlevel [2345] 
stop on runlevel [016] 
respawn 

exec spawn-fcgi -n -d /home/ubuntu/workspace/rtbopsConfig/myserver/ -f /home/ubuntu/workspace/rtbopsConfig/myserver/index.py -a 127.0.0.1 -p 9001 

vale la pena señalar que este se ejecuta como root, pero escucha en el puerto 9001. por lo que probablemente sería mejor a correr como nadie . Con Upstart 1.5 (Ubuntu 12.04 y más tarde otra vez) Sólo tiene que añadir esto:

setuid nobody 
setgid nogroup 

(Es posible que tenga que cambiar a nadie/nogroup a ubuntu/ubuntu ya que sus archivos están en/home/ubuntu)

También tenga en cuenta que start on startup no funcionará de manera confiable, porque el evento startup ocurre antes de que se instalen los sistemas de archivos y antes de que la red esté activa. También start on shutdown simplemente no funciona, ya que no es un evento real. Vea man upstart-events para más eventos.

+0

Creo que puede hacer que funcione de manera confiable si cambia la línea 'start' un poco para' start on (sistema de archivos y net-device-up IFACE = lo) o runlevel [2345] ' –

+1

¿Qué pasa si el proceso no puede ser brough t al primer plano? Tengo 2 comandos, phpbrew fpm start y phpbrew fpm stop. Solo quiero que el inicio del servicio y la parada del servicio se traduzcan en esos 2 comandos respectivamente. ¿Cómo puedo hacer eso? – CMCDragonkai

2

Creo que su pre-parada está deteniendo su servidor, por lo que cuando Upstart intenta detener su servidor no hay un proceso en ejecución para detenerse y le da ese error.