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?