
Tenho a tarefa de projetar um serviço a partir de um script bash para ser chamado da maneira service ... iniciar/parar/reiniciar.
O script que se tornará um serviço é um loop while infinito que é ativado a cada minuto e faz algumas verificações. Eu chamo assim:
start() {
echo -n $"Starting $DESC:"
DAEMON_ARGS=$(xmlstarlet sel -T -t -m "/config/input/sensor/device/resource" -v "concat(../../@type, ' ', ../../@dev, ' ', @res)" -n $CONFIGURATION_FILE | extract_devices) # get device names out of XML file
echo "daemon args $DAEMON_ARGS"
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
echo}
pid e daemon são definidos assim:
PIDFILE="/var/run/detection.pid"
NAME="jblub_control_loop.sh"
DAEMON="/root/test_det/${NAME}"
Quando eu corro
./detection start (também tentei copiar para init.d e executar com início de detecção de serviço)
O script init simplesmente não sai do loop e permanece bloqueado na função start-stop-daemon. Quando comento o loop while infinito dentro do meu jblub_control_loop.sh ele passa, mas nenhum arquivo pid é criado.
Minha pergunta é como iniciar corretamente o script com um loop infinito como serviço e por que meu arquivo pid não foi criado.
Responder1
Para começar,
use a opção --background para que seja bifurcada. use a opção -m para criar um arquivo PID
start-stop-daemon --start --background -m --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS
Para uma resposta completa, consultehttps://stackoverflow.com/questions/16139940/what-is-start-stop-daemon-in-linux-scripting
Aproveitar