Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Супервизор Администрирование Linux

Запуском процессов занимается супервизор, процесс, задачей которого является контроль других процессов, их запуск, перезапуск и остановку. Супервизор стартует в системе первым и затем запускает всё остальное по описаниям, которые ему дали. В свою очередь запущенные программы (их процессы) запускают свои процессы. В конечном итоге формируется дерево процессов, которое постоянно изменяется. Его можно вывести командой ps auxf:

# Урезанный вывод
# Вложенность указывает на то, кто кого запустил
root           1   /sbin/init # супервизор
root      167311   tmux -CC
root      594643    \_ -zsh
root      594719    |   \_ make app-bash
root      594727    |       \_ docker-compose run --rm web bash
root      594728    |           \_ docker-compose run --rm web bash
root      594747    |               \_ /usr/bin/docker start --attach --interac
root      595271    \_ -zsh
root      599249    \_ -zsh
root      599310        \_ nvim

Супервизор – такая же программа, как и всё остальное. Причём супервизоры бывают разные и могут меняться. На текущий момент в большинстве Linux дистрибутивов используется systemd. Ниже пример файла, описывающего как запустить процесс программы Nginx с помощью Systemd:

# Пример описания для веб-сервера Nginx
# /lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

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

Кроме того, systemd собирает логи со всех запущенных процессов. Для этого каждый процесс, контролируемый systemd, должен выводить свои логи в STDOUT. Затем их можно просматривать с помощью утилиты journalctl:

# Выведет логи nginx
journalctl -u nginx.service

Самостоятельная работа

На практике часто возникает необходимость сделать так, чтобы какой-то сервис возобновлял свою работу после перезагрузки системы. Для этого, как вы уже догадались, используется супервизор. Давайте поэкспериментируем с systemd и сделаем автозагрузку веб-сервера, который мы запускали в уроке «Файловая система».

  1. В каталоге /lib/systemd/system создайте файл в котором будет описан сервис

  2. Проверьте чтобы у файла были права 644

  3. Запустите сервис и проверьте, что он работает

  4. Откройте страницу в браузере. На экране должна быть строка: «Hello, Hexlet!»

  5. Включите автозагрузку для сервиса веб-сервера

  6. Перезагрузите систему. Выведите статус и убедитесь что сервис стартовал автоматически


Дополнительные материалы

  1. Systemd (ArchLinux Wiki)

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

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

Изображение Тото

Задавайте вопросы, если хотите обсудить теорию или упражнения. Команда поддержки Хекслета и опытные участники сообщества помогут найти ответы и решить задачу