UNIX системы

Больше
2 года 8 мес. назад - 2 года 8 мес. назад #25 от admin
admin ответил в теме UNIX системы
Системный сервис

Когда я начинал работать с UNIX системами, долгое время я не мог разобраться с идеологией системного сервиса (демонов). Видимо это было связано с тем, что до этого я имел дело с только сервисами Windows.
Там другая идеология системных сервисов, которая позволяет запускать сервисы только так, как это задумано Microsoft. И никак иначе...
Но UNIX системы - это в основном мир бесплатных решений и свободомыслия. Здесь нет жёсткой идеологии делать что-то так, как это указано свыше. И широкая свобода мнений. С годами всё лучшее, что придумано мировым сообществом, активно внедряется в жизнь.
Системные сервисы - это одна из основ UNIX систем. От стабильности её работы зависит стабильность работы самого UNIX. И конечно же разработчики (а это весь мир) на протяжении многих лет активно совершенствовали эту основу в сторону её улучшения.

Системные сервисы это в основном серверное ПО которое запускается при запуске системы для выполнения каких-либо задач. Но в UNIX, в отличии от WIndows, в качестве системного сервиса может быть запущено практически любое приложение (кроме работающего исключительно с интерфейсом пользователя, что является скорее исключением из правил). В Windows системный сервис должен быть написан особым образом и для запуска приложения в качестве системного сервиса необходимо приложить много усилий, чтобы оно заработало. При этом, зачастую, приложение работает крайне нестабильно...

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

Сервисы (daemon) можно запускать несколькими способами :

1. Как интернет сервис с помощью inetd (xinetd).
Это достаточно старый метод запуска и используется очень часто при запуске сервисов, которым необходимо иметь открытый TCP или UDP порт для общения с внешним миром.

2. С помощью пакета jobs-admin.

3. С помощью пакета upstart.
Вроде бы не используется начиная с версии 15 Ubuntu.

4. Как системный сервис с помощью системного сервиса systemd.
По умолчанию используется с версии 15 Ubuntu.

Я более подробно остановлюсь на последнем пункте, т.к это на сегодня это стандартный метод запуска всех сервисов.
В системе есть две основные команды работы с сервисами :

Команда systemctl - настройка режима работы и состояния сервиса :

systemctl enable <имя сервиса>.service Регистрация сервиса для автоматического запуска или запуска из командной строки.
systemctl disable <имя сервиса>.service Запрет запуска сервиса для автоматического запуска или при запуске из командной строки.
systemctl start <имя сервиса>.service Запуск сервиса.
systemctl stop <имя сервиса>.service Остановка сервиса.
systemctl restart <имя сервиса>.service Перезапуск сервиса.
systemctl reload <имя сервиса>.service Перезагрука конфигурации сервиса.

Полный список команд можно найти, выполнив в командной строке :
man systemctl

Команда service - запуск, остановка, перезапуск сервиса непосредственно через скрипт сценария запуска сервиса /etc/init.d/<файл скрипта сервиса>. В этом скрипте должны быть описаны хотя бы две команды - start и stop. В скрипте сценария запуска могут отсутствовать некоторые команды, поэтому Вы просто не сможете выполнить их, запуская скрипт. Если очень необходимо, можно дописать реализацию остальных команд в файле скрипта и заново выполнить регистрацию сервиса.

service <имя сервиса>.service start Запуск сервиса
service <имя сервиса>.service stop Остановка сервиса
service <имя сервиса>.service restart Перезапуск сервиса
service <имя сервиса>.service reload Перезагрузка конфигурации сервиса
service <имя сервиса>.service status Вывод состояния сервиса

Полный список команд можно найти, выполнив в командной строке :
man service

Файлы запуска системного сервиса раскиданы по различным папкам системы, поэтому более подробно об этом :

/etc - хранятся конфигурационные файлы некоторых системных сервисов.
/etc/init - в файле <имя сервиса> хранятся команды выполняемые до и после запуска сервиса.
/etc/init.d - в файле <имя сервиса> хранится сценарий запуска сервиса (команды start,stop,restart...).
/etc/systemd/system - ссылка <имя сервиса> - ссылка на файл данных регистрации сервиса. Эта ссылка создаётся при выполнении команды
systemctl enable <имя сервиса>.service
и удаляется при выполнении команды
systemctl disable <имя сервиса>.service
Если эта ссылка отсутствует, сервис не будет запущен даже если он зарегистрирован в системе !!!
/etc/default - в файле <имя сервиса> хранятся дополнительные конфигурационные настройки для запуска сервиса.
/lib/systemd/system - в файле <имя сервиса>.service хранятся данные на регистрацию сервиса.

Для того, чтобы выполнить регистрацию сервиса в системе, необходимо поместить файл регистрации сервиса <имя сервиса>.service в папку /lib/systemd/system.
После этого необходимо выполнить команду регистрации сервиса :
sudo systemctl enable <имя сервиса>.service
При этом будет создана ссылка в папке /etc/systemd/system на файл регистрации сервиса.
Если в файле регистрации сервиса (в секции [Install] строкой WantedBy=<имя папки>) было определено место размещения ссылки, то ссылка будет создана в соответствующей подпапке (/etc/systemd/system/<имя папки>.wants).

Кроме этого в папках \etc\rc0.d, rc1.d, rc2.d rc3.d rc4.d rc5.d rc6.d будут созданы ссылки на скрипт сценария запуска сервиса, которые определяют возможность и очерёдность запуска скрипта сценария при выполнении команды обслуживания системы. Ссылка будет начинаться с префикса, который состоит из буквы (K - остановка, S - запуск), числа 01-99 (очерёдность запуска) и имени сервиса.

Номера папок для различных режимов (команд) системы :
0 Остановка или завершение работы системы (команда shutdown).
1 Однопользовательский режим для административных задач.
2 Многопользовательский режим без конфигурации сетевых интерфейсов и сетевого сервиса.
3 Многопользовательский режим с конфигурацией сети, без GUI (только командная строка). Это режим по умолчанию при запуске системы.
4 Не используется или назначается пользователем для специального назначения.
5 Многопользовательский режим с конфигурацией сети и GUI (графический интерфейс пользователя).
6 Перезапуск системы (команда reboot).


По умолчанию, при регистрации сервиса, остановка сервиса назначается в режимах 0,1,6, а запуск сервиса в режимах 2,3,4,5. Но порядок может быть изменён Вами в команде регистрации сервиса (или вручную, изменением префикса ссылки на необходимый).
Изменить в дальнейшем порядок можно выполнением команды update-rc.d. Например выполнение команды :
sudo update-rc.d <имя сценария запуска сервиса> start 99 2 3 4 5 . stop 01 0 1 6 .
создаст ссылки для запуска сервиса с очерёдностью 99 в режимах 2,3,4,5 и остановке сервиса с очерёдностью 01 в режимах 0,1,6.





Полезные ссылки :

en.wikipedia.org/wiki/Runlevel#Ubuntu
open-life.org/blog/1862.html
www.freedesktop.org/software/systemd/man/systemd.service.html

Это сообщение ещё не закончено и будет изменяться и дополняться по мере наличия времени...
Последнее редактирование: 2 года 8 мес. назад пользователем admin.

Пожалуйста Войти , чтобы присоединиться к беседе.

Время создания страницы: 0.135 секунд
Работает на Kunena форум