Службы и демоны в 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.

 

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