Назад | Перейти на главную страницу

Есть ли «стандартный» способ создания демона в Debian?

Мне нужно создать демон из приложения в Debian. Есть ли в Debian какой-либо стандартный инструмент для этого, например «выскочка» в Ubuntu? Мне нужны только команды start-stop, чтобы запустить программу как демон с некоторыми параметрами и файлом pid и убить ее с помощью файла pid.

Я посмотрел на init.d, но, похоже, это для запуска при загрузке. Я хочу запустить свой демон вручную.

Вы можете создать своего демона вручную, следуя /etc/init.d/skeleton файл в Debian.

Ты можешь использовать /usr/bin/service запустить $ sudo service yourdaemon start и остановись $ sudo service yourdaemon stop ваш демон.

Пока вы не связываете свой сценарий ни с одним из /etc/rc?.d каталоги, он не запустится при запуске.

С другой стороны, вы можете посмотреть на DAEMON Tools, который не является стандартным для debian, но имеет некоторые интересные особенности.

В Debian (и Ubuntu) есть вспомогательная программа start-stop-daemon который используется в сценариях инициализации. У него довольно много опций для запуска и отслеживания демонов. Вы можете просто написать обертку вокруг него, например

case $1 in
start) start-stop-daemon --start --exec /my/exec/prog --pidfile /my/pid/file --background
       ;;
stop)  start-stop-daemon --stop --pidfile /my/pid/file 
       ;;
esac

Чтобы должным образом демонизировать процесс для Debian, вам нужно будет выполнить несколько шагов, включая разветвление от контролирующего процесса, сброс IO и создание файла идентификатора процесса для хорошей игры. Вместо этого вы можете использовать что-то вроде программы-демона из пакета с тем же именем, чтобы сделать это за вас. Если это то, что вы хотели сделать, ответ можно найти здесь, в StackOverflow: https://stackoverflow.com/questions/3095566/linux-daemonize

Команда upstart больше похожа на команду invoke-rc.d в Debian или команду service из пакета sysvinit-utils. Они ожидают, что сценарии инициализации в /etc/init.d будут отключены. В Debian стандартно создать один из них для вашего пакета и использовать программу start-stop-daemon, как вы можете видеть в примере /etc/init.d/skeleton.

Тот факт, что вы создаете сценарий /etc/init.d/myservice, не означает, что он должен запускаться автоматически. Вы можете настроить уровни запуска, на которых он останавливается и запускается автоматически, с помощью такого инструмента, как update-rc.d. Это описано более подробно на Отключить запуск службы на всех уровнях запуска?