start-stop-daemon não iniciará meu script Python como serviço

5

Estou tentando executar o Google AppEngine na minha máquina Debian, criei um arquivo init.d/gae :

. /lib/lsb/init-functions

#
# Initialize variables
#

name=gae
user=$name

pid=/var/run/$name.pid
prog="python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www"


case "${1}" in
   start)
      echo "Starting...Google App Engine"
      start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" 

      ;;

   stop)
      echo "Stopping...Google App Engine"

      ;;

   restart)
      ${0} stop
      sleep 1
      ${0} start
      ;;

   *)
      echo "Usage: ${0} {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

# End scriptname

Estou testando o script invocando manualmente, e o script é executado, mas não como um daemon ou, pelo menos, não se desanexa do terminal. Estou esperando / procurando funcionalidade semelhante ao Apache.

Qual opção estou faltando?

EDITAR

Eu devo notar que nenhum arquivo PID está sendo escrito ou criado apesar do interruptor indicar que ele deve ser criado

    
por Alex.Barylski 10.09.2014 / 01:11

2 respostas

5

Você tem dois problemas que eu posso ver:

prog=python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www

Inicia /opt/google_appengine/dev_appserver.py com prog=python no ambiente. Isso é antes de seu bloco start , então start-stop-daemon não está nem se envolvendo.

A solução rápida é citar toda a tarefa assim:

prog='python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

Mas uma solução melhor é usar o estilo de /etc/init.d/skeleton e fazer

DAEMON='python /opt/google/appengine/dev_appserver.py'
DAEMON_ARGS='--host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

O segundo problema é que você está erroneamente citando $prog .

start-stop-daemon --start --make-pidfile --background --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog"

informa ao start-stop-daemon para tentar iniciar um programa chamado python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www .

Mas claramente não há nenhum programa chamado isso. Você deseja iniciar python com argumentos. Removendo as aspas duplas, há a correção rápida, mas uma melhor, novamente seguindo /etc/init.d/skeleton , seria

start-stop-daemon --start --quiet --chuid $CHUID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS

    
por 11.09.2014 / 04:35
0

Para minha vida, não consegui descobrir por que o start-stop-daemon não estava funcionando ... Estou executando o Debian 7.6 wheezy e só posso assumir que o recurso foi desativado.

Eu mudo o like para usar / dev / null e o & e voila - sciprt começa e fica rodando como esperado ... Eu roubei o código do mysql:

$prog > /dev/null 2>&1 &

Eu ficaria muito interessado se alguém pudesse explicar por que isso funciona e a solução original não ... em qualquer caso imaginei que compartilharia minha experiência na esperança de:

  1. Salvar outra pessoa a dor de cabeça com a solução
  2. Solicitando que alguém dê um passo à frente e explique como fazer isso funcionar como eu queria originalmente:)

EDIT | Aqui estão as duas linhas de interesse agora

prog='/usr/bin/python /opt/google_appengine/dev_appserver.py --host=0.0.0.0 --admin_host=0.0.0.0 --php_executable_path=/usr/bin/php-cgi /var/www'

start-stop-daemon --start --make-pidfile --background --oknodo --user $user --name $name --pidfile $pid --exec $prog
    
por 11.09.2014 / 04:07