Parada correta:
start-stop-daemon --stop --oknodo --pidfile $PIDFILE
Estou escrevendo um script de inicialização do lsb (reconhecidamente algo que nunca fiz do zero) que lança um script php que se daemoniza sozinho. O script php começa assim:
#!/usr/bin/env php
<?php
/* do some stuff */
É então iniciado assim no script de inicialização:
# first line is args to start-stop-daemon, second line is args to php-script
start-stop-daemon --start --exec /path/to/executable/php-script.php \
-- --daemon --pid-file=$PIDFILE --other-php-script-args
O --daemon
flag faz com que o script php separe & executado como um daemon, em vez de depender de start-stop-daemon
para separá-lo.
É assim (tentando) parar no script de inicialização:
start-stop-daemon --stop --oknodo --exec /path/to/executable/php-script.php \
--pidfile $PIDFILE
O problema é que, quando tento parar por meio do script de inicialização, isso me dá isto:
$ sudo /etc/init.d/my-lsb-init-script stop
* Stopping My Project
No /path/to/executable/php-script.php found running; none killed.
...done.
Uma olhada rápida em ps
me diz que, embora o próprio script php seja executável, ele é executado como php <script>
em vez do próprio nome do script, o que impede que o daemon start-stop o visualize. O arquivo PID está sendo gerado, mas parece ignorá-lo e tentar encontrar + kill pelo nome do processo.
$ ps ax | grep '/path/to/executable/php-script.php'
2505 pts/1 S 0:01 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2507 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2508 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2509 pts/1 S 0:00 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
2518 pts/1 S 0:01 php /path/to/executable/php-script.php --daemon --pid-file /var/run/blah/blah.pid --other-php-script-args
$ cat /var/run/blah/blah.pid
2518
Estou completamente entendendo mal alguma coisa aqui? Ou há uma maneira fácil de contornar isso?