Это старая версия документа.


введение

в этой статье мы рассмотрим использование start-stop-daemon. данная замечательная утилита идет в составе dpkg, и, следовательно, присутствует в любой системе на базе Debian/Ubuntu. функция ее следующая: она позволяет запустить любой процесс в виде демона, то есть в фоне. нужно это для того, чтобы запускать в фоне те процессы, которые сами не умеют ухожить в фон. запуск процесса в виде демона позволит не держать постоянной открытой tty-консоль или вкладку в терминале, а также даст больше возможностей для контроля данного процесса

основы

как и упомянуто выше, основное предназначение - запуск программ в фоновом режиме. в качестве примера возьмем museekd, демон-клиент для p2p-сети soulseek 1). start-stop-daemon имеет два обязательных параметра: -S (или –start) и -K (–stop), один из которых должен присутствовать в любой команде. далее следуют параметры, указывающие, что и как запустить. для начала просто запустим museekd. для этого укажем программе в качестве действия запуск, а в качестве исполняемого файла - /usr/bin/museekd. исполняемый файл задается ключом -x

start-stop-daemon -Sx /usr/bin/museekd

однако, в фон программа пока что не уйдет, а вы увидите на экране ее вывод. для того, чтобы процесс уходил в фон, нужно добавить ключ -b. заодно добавим ключ -v для отображения диагностических сообщений

start-stop-daemon -Sbvx /usr/bin/museekd

уже лучше. программа запустилась и работает в фоне. в нашем примере этого достаточно для того, чтобы museekd подключился к серверу и начал работу. для остановки процесса нужно указать ключ -K, т.е. действие «стоп», а так же сам процесс, который нужно остановить. процесс для остановки мы опять же укажем по исполняемому файлу, с помощью ключа -x

start-stop-daemon -Kvx /usr/bin/museekd

start-stop-daemon найдет процесс museekd и остановит его (по умолчанию - отправив SIGTERM). все, программа завершила свою работу

работа с pid-файлами

если вы хотите запустить несколько копий одной программы, следует использовать pid-файлы2) для управления такими процессами. запустим тот же самый museekd, записав pid-файл в его папку с настройками. путь к pid-файлу задается с помощью ключа -p

start-stop-daemon -Sbvmp $HOME/.museekd/pid -x /usr/bin/museekd

еще здесь интересен ключ -m он укажет утилите start-stop-daemon, что pid-файл нужно создать при запуске программы. некоторые программы сами умеют создавать pid-файлы - в этом случае данный ключ не нужен теперь в заданном файле записан pid запущенного процесса. зная его, вы можете отличить его от других копий той же программы, найти процесс, к примеру, в htop и сделать с ним что-либо (например, изменить приоритет или остановить). для остановки процессов также можно использовать pid-файлы, чтобы остановить конкретный процесс. при этом указание исполняемого файла не требуется, нужно лишь задать действие «стоп» и pid-файл

start-stop-daemon -Kvp .museekd/pid

start-stop-daemon прочитает pid из заданного файла, проверит, есть ли такой процесс и остановит его

прочие возможности

передача параметров запускаемой программе

если запускаемой программе нужно передать какие-либо параметры, они отделяются двумя дефисами. все, что идет далее, не воспринимается как параметры для start-stop-daemon, а передается запускаемой программе в неизмененном виде. запустим все тот же museekd с альтернативным файлом конфигурации

start-stop-daemon -Sbvmx /usr/bin/museekd -p $HOME/.museekd/pid -- -c .museekd/

данная конструкция запустит museekd -c .museekd/config.new. двойной дефис и следующие за ним параметры не обязательно располагать после исполяемого файла. главное - в конце команды


утилита start-stop-daemon имеет гораздо больше возможностей, чем описано в данной статье. например, она позволяет запустить процесс от имени другого пользователя или даже в chroot-окружении, задать приоритет процесса, изменить сигнал остановки (например, использовать SIGKILL вместо SIGTERM)… в принципе, все это вполне понятно расписано в man start-stop-daemon или start-stop-daemon –help. здесь же пусть будет описан необходимый простому пользователю минимум. впрочем, если кто-нибудь готов описать остальные функции - вперед!

1)
да-да, демон, не умеющий работать в виде демона. бывает и такое
2)
pid - это уникальный номер, по которому идентифицируется каждый запущенный в системе процесс. по pid можно отличить разные копии одной программы. pid-файл - это простой текстовый файл, в который записывается pid процесса. pid-файлы для некоторых системных процессов можно найти в /var/run