Criação adequada de script Daemon de bash

2

No Ubuntu, copiei /etc/init.d/ skeleton como um novo arquivo e o tornei "todos" executáveis (assim como os outros nesse diretório). Nele, fiz um "foo" que era apenas outro script Bash em /usr/sbin , mas era especial porque ele fica em um loop esperando por uma conexão de pipe nomeado de uma página da Web PHP. (Mais detalhes são aqui , embora seja um tópico secundário.)

Como ele tem que esperar em um loop em uma conexão de pipe nomeado, isso suspendeu o comando na linha de comando, obviamente. Não é um grande problema, porque eu realmente quero que ele desligue e espere em uma nova conexão. Mas eu não quero que isso aconteça em primeiro plano. Então, eu fiz o start-stop-daemon utilizar a opção --background.

Ok, funciona muito bem para iniciar e status, mas parar não funciona - deixa o comando na memória, bem como o comando cat /tmp/pipe que tenho no meu script /usr/sbin/foo Bash. Eles avisam que isso pode acontecer ao usar a opção --background no comando start-stop-daemon.

A PERGUNTA

Então, qual é o jeito certo de parar / usr / sbin / foo quando ele é executado com start-stop-daemon --background , junto com os processos filhos parados (o comando cat / tmp / pipe, por exemplo) que podem ser chamados por / usr / sbin / foo? Quer dizer, eu acho que eu poderia usar killall, mas isso é meio mortal. Talvez você saiba de uma maneira mais eficiente?

    
por ServerChecker 07.06.2011 / 07:39

2 respostas

1

Acho que nessa situação o shell será o líder do grupo de processos contendo os vários comandos executados pelo script . Você pode matar um grupo de processos enviando um sinal para o oposto do PID do grupo de processos:

kill -TERM -$(cat /var/run/my_shell_daemon.pid)
    
por 07.06.2011 / 09:29
1

Eu recomendaria consultar o LSB:

link

Aqui está um wiki centrado no Debian que também pode ser útil:

link

Você normalmente armazena um arquivo pid em algum lugar em / var / run e depois mata explicitamente o comando em stop.

    
por 07.06.2011 / 08:51