Службы и демоны в Linux, системы инициализации


Демоны Linux — процессы, родительскими процессами которых являются init/upstart/systemd

Отличительной чертой, выделяющей демоны среди других процессов, является отсутствие их связи с терминалом.

Вывод демонизованного процесса может писаться в лог или подавляться (подавление вывода реализуется его перенаправлением в /dev/null)



Примером демона может быть apache2 и любые другие утилиты, запускающиеся при помощи инициализационных скриптов вместе с системой и работающие постоянно «в фоновом режиме».

Типовой задачей системного администрирования является написание собственных демонов.



Демоны Linux и управление ими


Демоны обычно имеют конфигурационные файлы и выделяются тем. что могут запускаться и останавливаться пользователем вручную командами вида: service deamonname start / service deamonname stop / service deamonname restart



Чтобы найти конфигурационные файлы пакета можно использовать whereis:

whereis apache2



Вывод команды примерно следующий:

apache2: /usr/sbin/apache2 /usr/lib/apache2 /etc/apache2 /usr/share/apache2 /usr/share/man/man8/apache2.8.gz



Также информацию о конфигурационных файлах часто можно найти в man программного пакета

man apache2



В случае с самым распространенным веб-сервером — конфигурационные файлы находятся в /etc/apache2

cd /etc/apache2

mcedit apache2.conf



Обычно файлы снабжают комментариями (обозначаются знаком решетки # в начале строки), в комментариях могут приводиться примеры конфигурации программных пакетов и рекомендуемые для различных ситуаций значения директив.


В конфигурационных файлах задается логирование — в случае если пакет работает неправильно — включить логирование или изменить его параметры.

Часто демоны работают от имени системных пользователей, специально для них создаваемых — так apache может работать от имени пользователя www-data или от имени пользователя apache.



Демоны Linux стартуют вместе с системой, родительским процессом для них является init


Запуск демона с использованием init синтаксиса:

service apache2 start

service apache2 restart

service apache2 stop



Инициализационные скрипты демонов, управляемых init, можно посмотреть в каталоге /etc/init.d/

В инициализационных скриптах указываются, в частности, runlevel-ы на которых демон стартует и останавливается.



Runlevels в Linux


0 Выключенное состояние (ядро не функционирует)
1 Режим использования одним пользователем (ядро функционирует, возможна авторизация, никакие сервисы не работают)
2 Режим, позволяющий работать нескольким пользователем и сети
3 Мультипользовательский режим с сетью
5 Мультипользовательский режим с сетью и GUI
6 Перезагрузка



В современном Linux init используется все реже поскольку данная система является устаревшей — она была создана довольно давно и плохо работает при необходимости обрабатывать данные поступающие в несколько потоков.



Замещается init системами upstart и systemd

upstart замещает все инициализационные скрипты конфигурационными файлами, они находятся в /etc/init



Управляются демоны, использующие upstart, следующим образом:

status apache2

start apache2

restart apache2



В 2014 году начался переход от upstart к systemd. Многие дистрибутивы сейчас используют одновременно несколько систем инициализации.



Среди использующих systemd — Fedora:

systemctl stop apache2

systemctl start apache2

systemctl restart apache2



Также используя systemd можно легко добавлять демоны в автозагрузку (демон будет стартовать при старте системы)

systemctl enable apache2

systemctl disable apache2



В 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.



Читайте про то, как добавить собственный скрипт, который будет выполняться после старта системы. Часто это бывает нужно чтобы добавить дополнительный функционал и свои скрипты.

Сказать спасибо