start-stop-daemon não removendo o arquivo pid antigo

1

Eu tenho um script de inicialização que escrevi para iniciar e parar um aplicativo como um serviço. O código está aqui:

#! /bin/bash
PID_FILE=/var/run/myservice.pid
case "" in
  start)
      echo "Starting up MyService..."
      start-stop-daemon --start -b -m --pidfile $PID_FILE --exec /usr/bin/java -- -cp /path/to/jarfile.jar $CLASS_NAME --config /etc/myService/config.ini
      cat $PID_FILE
    ;;
  stop)
     echo "Stopping MyService..."
     start-stop-daemon --stop --signal KILL -b -m --pidfile $PID_FILE --exec /usr/bin/java -- -cp /path/to/jarfile.jar $CLASS_NAME --config /etc/myService/config.ini
    ;;
  status)
    start-stop-daemon --status --pidfile $PID_FILE
    PROC_STATUS=$?
    echo $PROC_STATUS
    exit $PROC_STATUS
    ;;
esac

O serviço começa e termina bem, mas o comportamento que estou percebendo é que quando eu corro

sudo service MyService stop

o arquivo pid não é removido. Quando tento iniciar ou reiniciar o serviço, isso é bem-sucedido - ele simplesmente grava o novo pid no arquivo pid. Por que o arquivo pid não é removido quando o serviço é interrompido corretamente?

    
por FrustratedWithFormsDesigner 04.08.2015 / 17:17

1 resposta

2

Na verdade, start-stop-daemon não deve remover pidfiles. Você pode fazer isso no seu script ( rm -f $pidfile ). Você pode querer dar uma olhada em algum outro script de início. O script /etc/init.d/dbus , por exemplo, possui o seguinte script de desligamento (para do stop ):

shut_it_down()
{
  log_daemon_msg "Stopping $DESC" "$NAME"
  start-stop-daemon --stop --retry 5 --quiet --oknodo --pidfile $PIDFILE \
    --user $DAEMONUSER
  # We no longer include these arguments so that start-stop-daemon
  # can do its job even given that we may have been upgraded.
  # We rely on the pidfile being sanely managed
  # --exec $DAEMON -- --system $PARAMS
  log_end_msg $?
  rm -f $PIDFILE
}

Na página de manual:

  

-m, --make-pidfile                 Usado ao iniciar um programa que não cria seu próprio pid                 Arquivo. Esta opção fará com que o daemon start-stop crie o arquivo                 referenciado com --pidfile e coloque o pid nele antes                 executando o processo. Note que o arquivo não será removido quando                 parando o programa. NOTA: Esse recurso pode não funcionar em todos                 casos. Mais notavelmente quando o programa que está sendo executado                 seu processo principal. Por causa disso, geralmente é apenas útil                 quando combinado com a opção --background.

(veja link )

    
por lemonslice 04.08.2015 / 17:26