start-stop-daemon
Содержание
В этой статье будет рассмотрено использование start-stop-daemon . Данная утилита идет в составе dpkg и, следовательно, присутствует в любой системе на базе Debian/Ubuntu.
Ее функция следующая: она позволяет запустить любой процесс в виде демона, то есть в фоне. Это нужно для того, чтобы запускать в фоне те процессы, которые сами не умеют уходить в фон. Запуск процесса в виде демона позволит не держать постоянной открытой tty-консоль или вкладку в терминале, а также даст больше возможностей для контроля данного процесса.
Основы
Как упомянуто выше, основное предназначение — запуск программ в фоновом режиме. В качестве примера будет взят museekd , демон-клиент для p2p-сети soulseek. start-stop-daemon имеет два обязательных параметра: -S (или –start ) и -K ( –stop ), один из которых должен присутствовать в любой команде. Далее следуют параметры, указывающие, что и как запустить.
Запуск демона
Для того, чтобы запустить демон необходимо помимо ключа -S указать так же исполняемый файл – /usr/bin/museekd . Исполняемый файл задается ключом -x
Однако, в фон программа не уйдет и вы увидите на экране ее вывод. Для того, чтобы процесс уходил в фон, нужно добавить ключ -b . Заодно добавьте ключ -v для отображения диагностических сообщений
Программа запустится и будет работать в фоне. Для взятого примера этого достаточно.
Остановка демона
Для остановки процесса нужно указать ключ -K , т.е. действие «стоп», а так же сам процесс, который нужно остановить. Процесс для остановки так же указывается по исполняемому файлу, с помощью ключа -x
start-stop-daemon найдет процесс museekd и остановит его (по умолчанию — отправив SIGTERM).
Работа с pid-файлами
Если вы хотите запустить несколько копий одной программы, следует использовать pid-файлы 1) для управления такими процессами. Для запуска museekd с созданием pid-файла следует использовать ключ -p . Пример:
Здесь также появился ключ -m , указывающий утилите start-stop-daemon, что pid-файл нужно создать при запуске программы. Некоторые программы умеют создавать pid-файлы самостоятельно – в этом случае данный ключ не нужен.
Теперь в заданном файле записан PID запущенного процесса. Зная его, вы можете отличить его от других копий той же программы, найти процесс, к примеру, в top и сделать с ним что-либо (например, изменить приоритет или остановить).
Для остановки процессов также можно использовать pid-файлы, чтобы остановить конкретный процесс. При этом указание исполняемого файла не требуется, нужно лишь задать действие «стоп» и pid-файл
start-stop-daemon прочитает PID из заданного файла, проверит, есть ли такой процесс и остановит его.
Прочие возможности
Передача параметров запускаемой программе
Если запускаемой программе нужно передать какие-либо параметры, они отделяются двумя дефисами. Все, что идет далее, не воспринимается как параметры для start-stop-daemon, а передается запускаемой программе в неизмененном виде. Пример запуска museekd с альтернативным файлом конфигурации:
Данная конструкция запустит museekd -c .museekd/config.new . Двойной дефис и следующие за ним параметры не обязательно располагать после исполняемого файла. Главное – в конце комманды.
Утилита start-stop-daemon имеет гораздо больше возможностей, чем описано в данной статье. Например, она позволяет запустить процесс от имени другого пользователя или даже в chroot-окружении, задать приоритет процесса, изменить сигнал остановки (например, использовать SIGKILL вместо SIGTERM) и т. п. Больше информации можно получить из man start-stop-daemon и start-stop-daemon –help .
Источник
Демоны Linux и управление ими
Демоны обычно имеют конфигурационные файлы и выделяются тем. что могут запускаться и останавливаться пользователем вручную командами вида: service deamonname start / service deamonname stop / service deamonname restart
Чтобы найти конфигурационные файлы пакета можно использовать whereis:
Вывод команды примерно следующий:
apache2: /usr/sbin/apache2 /usr/lib/apache2 /etc/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz
Также информацию о конфигурационных файлах часто можно найти в man программного пакета
В случае с самым распространенным веб-сервером — конфигурационные файлы находятся в /etc/apache2
Обычно файлы снабжают комментариями (обозначаются знаком решетки # в начале строки), в комментариях могут приводиться примеры конфигурации программных пакетов и рекомендуемые для различных ситуаций значения директив.
В конфигах задается логирование — в случае если пакет работает неправильно — включить логирование или изменить его параметры.
Часто демоны работают от имени системных пользователей, специально для них создаваемых — так apache может работать от имени пользователя www-data или от имени пользователя apache.
Демоны Linux стартуют вместе с системой, родительским процессом для них является init
Запуск демона с использованием init синтаксиса:
Инициализационные скрипты демонов, управляемых init, можно посмотреть в каталоге /etc/init.d/
В инициализационных скриптах указываются, в частности, runlevel-ы на которых демон стартует и останавливается.
Runlevels в Linux
0 Выключенное состояние (ядро не функционирует)
1 Режим использования одним пользователем (ядро функционирует, возможна авторизация, никакие сервисы не работают)
2 Режим, позволяющий работать нескольким пользователем и сети
3 Мультипользовательский режим с сетью
5 Мультипользовательский режим с сетью и GUI
6 Перезагрузка
В современном Linux init используется все реже поскольку данная система является устаревшей — она была создана довольно давно и плохо работает при необходимости обрабатывать данные поступающие в несколько потоков.
Замещается init системами upstart и systemd
upstart замещает все инициализационные скрипты конфигурационными файлами, они находятся в /etc/init
Управляются демоны, использующие upstart, следующим образом:
В 2014 году наметился переход от upstart к systemd. Многие дистрибутивы сейчас используют одновременно несколько систем инициализации.
Среди использующих systemd — Fedora:
Также используя systemd можно легко добавлять демоны в автозагрузку (демон будет стартовать при старте системы)
В init и upstart для того чтобы включить/выключить автозагрузку достаточно добавить/удалить инициализационный файл или скрипт из каталога /etc/init в init и /etc/init.d в upstart (или воспользоваться скриптом update-rc.d — update-rc.d defaults apache2 чтобы добавить сервис в автозагрузку и update-rc.d remove apache2 чтобы его удалить из автозагрузки).
Часто применяется также runit — удобная система, которая также позволяет управлять сервисами (sv s apache2 / sv t apache2 / sv d apache2).
На одной машине могут использоваться демоны, управляемые при помощи различных систем инициализации. Так на сервере часть ПО может запускаться посредством init скриптов, часть — под runit.
Читайте про то, как добавить собственный скрипт, который будет выполняться после старта системы. Часто это бывает нужно чтобы добавить дополнительный функционал и свои скрипты.
Источник
IgorKa — Информационный ресурс
Немного обо всем и все о немногом, или практический опыт системного администратора.
Пн | Вт | Ср | Чт | Пт | Сб | Вс |
---|---|---|---|---|---|---|
« Дек | Фев » | |||||
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Лекция №25 — Управление демонами
Сегодня мы поговорим о процессах Linux, которые носят называние — демоны, а также посмотрим каким образом происходит управление демонами (или службами, если проводить параллель с Windows). Основное отличие процесса-демона от обычного пользовательского процесса, в том, что демон не имеет управляющего терминала, а соответственно взаимодействовать с ним пользователь может только посредством других программ или управляющих скриптов. Итак, в простейшем случае демон — это исполняемый файл или скрипт, который работает в фоновом режиме. Очень часто такие файлы заканчиваются на букву d (от daemon): sshd, httpd, cupsd — хотя это не обязательно.
Для того чтобы управлять демоном существует управляющий скрипт для каждого демона. Расположены такие скрипты, как правило, в каталоге /etc/init.d/. Именуются такие скрипты так как и сам демон (только без буквы d в конце), хотя это не является незыблемым правилом. Например, скрипт /etc/init.d/ssh управляет демоном sshd, который расположен в каталоге /usr/sbin/.
Что подразумевается под управлением демона? Это возможность выполнить определенные операции, такие как запуск демона, останов, перезапуск, принудительный останов и перезапуск, и некоторые другие. Поэтому запуская управляющий скрипт мы обязательно должны передать ему параметр, который описывает производимое с демоном действие. Эти параметры строго определены, а основные и наиболее часто встречающиеся это:
start — запуск демона
stop — останов демона
restart — перезапуск демона
reload — перезагрузка (перечитывание конфигурационных файлов) параметров демона
force-reload — принудительная перезагрузка параметров демона
Если вы сами будете писать подобный управляющий скрипт, то должны помнить, что он должен обрабатывать как минимум два параметра: start и stop. Можете открыть любой скрипт из директории /etc/init.d/ и увидеть, как посредством конструкции case реализована обработка управляющих параметров.
Итак, давайте попробуем остановить и запустить демон cron. Для этого в каталоге /etc/init.d/ находится управляющий скрипт /etc/init.d/cron:
Если запустить его без параметров (строка 1), то увидим подсказку какие параметры необходимо передавать этому скрипту (строка 2). Пробуем запустить с параметром stop (строка 3) и проверяем, что демон остановлен (строка 5). Затем запускаем демон (строка 6) и проверяем (строка 8). Таким же образом происходит управление другими демонами.
Давайте теперь посмотрим как происходит запуск демонов во время загрузки операционной системы Linux и во время ее остановки. Как вы должны помнить в Linux есть такое понятие как runlevel — уровень запуска системы. На каждом уровне запуска системы выполняются четко заданное количество демонов. При переходе с уровня на уровень, демоны, которые не должны работать — завершаются, а которые должны работать — запускаются. Для того чтобы указать системе какие демоны на каком уровне запуска должны стартовать или останавливаются в разных дистрибутивах существуют специально предназначенные для этого утилиты. Но мы сейчас посмотрим на сам механизм работы системы запуска демонов, чтобы понять ее суть.
В каталоге /etc есть каталоги с именем rcN.d, где N — это символ указывающий на runlevel к которому относится каталог. То есть имеем такие каталоги: rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d и rcS.d. Если посмотреть содержимое каталогов, то можно увидеть, что в них содержатся символические линки на скрипты из каталога /etc/init.d/:
Символические линки именуются в соответствии со следующим правилом: сначала идет латинская большая буква S или K, затем двузначное число и после этого точное называние скрипта на который ссылается символический линк. Буква K в имени линка означает, что скрипт на который он ссылается должен быть выполнен с параметром stop. То есть K11cron (строка 6) означает, что будет выполнена команда /etc/init.d/cron stop. То есть будет остановлен демон cron. Соответственно буква S означает, что скрипт на который указывает линк должен выполнится с параметром start. Двузначное число определяет порядок выполнения скриптов, а соответственно порядок запуска или завершения демонов. Первыми запускаются скрипты с меньшими номерами. Таким образом реализуется разрешение зависимостей скриптов (демонов). Например, демон cron должен быть остановлен только после того как будет остановлен демон apache2 (строки 6 и 3). Если у символических линков одинаковый номер, то это означает, что демоны не зависят друг от друга и скрипты могут выполняться в любом порядке. Также нужно отметить, что сначала выполняются все скрипты с буквой K, а затем только все скрипты с буквой S.
Как известно все пользовательские процессы (а демоны также к таковым относятся) начинаются с процесса init, а который последовательно читает файл /etc/inittab. Среди прочих в /etc/inittab есть следующие строки:
Когда системы переходит на какой либо runlevel, например, на шестой, то выполняется скрипт /etc/init.d/rc, которому в качестве параметра передается номер уровня запуска — 6. В результате своей работы скрипт /etc/init.d/rc начинает выполнять в соответствии с вышеописанными правилами все скрипты на которые есть символические ссылки в каталоге /etc/rc6.d/. Если упрощенно, то имя каждого символического линка преобразуется из вида K01gdm в /etc/init.d/gdm stop, а S10sysklogd в /etc/init.d/sysklogd start.
Таким образом если вы хотите, чтобы какой-то демон запускался (или останавливался) на нужном вам уровне вам нужно создать соответствующий символический линк в соответствующем каталоге /etc/rcN.d/. Например, если вы не хотите, чтобы демон cron запускался на всех уровнях значит из всех каталогов /etc/rcN.d/ необходимо удалить линк вида S80cron.
Если у вас есть свой собственный демон (например mydaemon c управляющим скриптом mydaemon) и вы хотите его запускать на 5-м уровне запуска значит в каталоге /etc/rc5.d/ вам необходимо создать символический линк:
/ linux$ sudo ln -s / etc / init.d / mydaemon / etc / rc5.d / S99mydaemon
Источник