Это старая версия документа.
Содержание
утилита start-stop-daemon
введение
в этой статье мы рассмотрим использование 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
. здесь же пусть будет описан необходимый простому пользователю минимум. впрочем, если кто-нибудь готов описать остальные функции - вперед!