Правильное создание сценария Bash Daemon

На Ubuntu я скопировал /etc/init.d/Скелет в виде нового файла и сделал его "всем" исполняемым (как и остальные в этом каталоге). В ней я сделал "foo", который был просто еще одним скриптом Bash в /usr/sbin, но он был особенным в том, что он находится в цикле ожидания соединения с именованным каналом с веб-страницы PHP. (Более подробно об этом здесь, хотя это побочная тема.)

Поскольку он должен ждать в цикле при соединении с именованным каналом, это явно повесило команду в командной строке. Ничего страшного, потому что я на самом деле хочу, чтобы он завис и ждал нового соединения. Но я не хочу, чтобы это происходило на переднем плане. Итак, я заставил start-stop-daemon использовать опцию --background.

Хорошо, это отлично работает для запуска и состояния, но остановка не работает - она ​​оставляет команду в памяти, а также cat /tmp/pipe команда у меня есть в моем /usr/sbin/foo Bash скрипт. Они предупреждают, что это может произойти при использовании параметра --background в команде start-stop-daemon.

ВОПРОС

Итак, как правильно остановить /usr/sbin/foo, когда он запускается с start-stop-daemon --backgroundнаряду с остановкой любых дочерних процессов (например, команды cat /tmp/pipe), которые могут быть вызваны /usr/sbin/foo? Я имею в виду, я мог бы использовать killall, но это смертельно опасно. Возможно, вы знаете более эффективный способ?

2 ответа

Решение

Я думаю, что в этой ситуации оболочка будет лидером группы процессов, содержащей различные команды, выполняемые сценарием. Вы можете убить группу процессов, отправив сигнал противоположному PID группы процессов:

kill -TERM -$(cat /var/run/my_shell_daemon.pid)

Я бы рекомендовал проконсультироваться с LSB:

http://refspecs.freestandards.org/LSB_3.1.0/LSB-Core-generic/LSB-Core-generic/tocsysinit.html

Вот вики, ориентированные на Debian, которые также могут быть полезны:

http://wiki.debian.org/LSBInitScripts

Обычно вы прячете pid-файл где-нибудь в /var/run, а затем явно останавливаете эту команду при остановке.

Другие вопросы по тегам