Мне нужно создать демон из приложения в Debian. Есть ли в Debian стандартный инструмент для этого, например «upstart» в Ubuntu? Мне нужны только команды start-stop, чтобы запустить программу как демон с некоторыми опциями и файлом pid и убить его с помощью файла pid.
Я посмотрел на init.d, но, похоже, они предназначены для запуска при загрузке. Я хочу запустить мой демон вручную.
debian
daemon
debian-lenny
upstart
Куроки Казе
источник
источник
Ответы:
Вы можете создать своего демона вручную, следуя
/etc/init.d/skeleton
файлу в Debian.Вы можете использовать
/usr/bin/service
для запуска$ sudo service yourdaemon start
и остановки$ sudo service yourdaemon stop
вашего демона.Пока вы не свяжете свой сценарий ни с одним из
/etc/rc?.d
каталогов, он не запустится при запуске.С другой стороны, вы можете захотеть взглянуть на daemontools , который не является стандартным для Debian, но имеет некоторые интересные особенности.
источник
/usr/bin/service
системы (это Debian Lenny), но я могу запускать сценарии напрямую/etc/init.d/myservice start
.sudo invoke-rc.d yourservice start
а такжеDebian (и Ubuntu) имеют вспомогательную программу,
start-stop-daemon
которая используется в скриптах инициализации. У него довольно много вариантов запуска и отслеживания демонов. Вы можете просто написать обертку вокруг него, например,источник
Чтобы правильно демонизировать процесс для Debian, вам нужно будет сделать несколько шагов, в том числе отойти от процесса управления, сбросить IO и создать файл идентификатора процесса, чтобы играть хорошо. Вместо этого вы можете использовать что-то вроде программы-демона из пакета с тем же именем, чтобы сделать это для вас. Если это то, что вы хотели сделать, ответ можно найти здесь, в StackOverflow: /programming/3095566/linux-daemonize.
Команда upstart больше похожа на команду Debian invoke-rc.d или команду service из пакета sysvinit-utils. Они ожидают отработки сценариев инициализации в /etc/init.d. В Debian принято создавать один из них для вашего пакета и использовать его в программе start-stop-daemon, как вы можете видеть в примере /etc/init.d/skeleton.
Тот факт, что вы создаете скрипт /etc/init.d/myservice, не означает, что он должен запускаться автоматически. Вы можете настроить уровни запуска, при которых он останавливается и запускается автоматически, используя такой инструмент, как update-rc.d. Это описано более подробно в разделе Отключение запуска службы на всех уровнях выполнения?
источник