Управление автозагрузкой сервисов и скриптов в Linux

В Linux служба — это программа, работающая в фоновом режиме . Службы можно запускать по запросу или во время загрузки.

Список служб Linux

Systemd использует концепцию модулей, которыми могут быть службы, сокеты, точки монтирования, устройства и т. Д. Модули определяются с помощью текстовых файлов в формате ini . Эти файлы содержат информацию об устройстве, его настройках и командах для выполнения. Расширения файлов определяют тип файла модуля. Например, файлы системных сервисных модулей имеют расширение .service .

systemctl — это утилита командной строки, которая используется для управления systemd и службами. Он является частью экосистемы systemd и по умолчанию доступен во всех системах.

Чтобы получить список всех загруженных служебных единиц, введите:

sudo systemctl list-units —type service

UNIT LOAD ACTIVE SUB DESCRIPTION loaded active running Regular background program processing daemon …

Каждая строка вывода содержит следующие столбцы слева направо:

  • UNIT — Название сервисной единицы.
  • LOAD — Информация о том, загружен ли файл объекта в память.
  • ACTIVE — состояние активации файла модуля высокого уровня, которое может быть активным, перезагружающимся, неактивным, неудачным, активируемым, деактивируемым. Это обобщение столбца SUB .
  • SUB — состояние активации файла юнита низкого уровня. Значение этого поля зависит от типа объекта. Например, модуль типа service может находиться в одном из следующих состояний: неработающий, завершенный, сбойный, неактивный или работающий.
  • DESCRIPTION — Краткое описание файла объекта.

По умолчанию команда перечисляет только загруженные активные юниты. Чтобы увидеть загруженные, но неактивные модули, передайте параметр —all :

sudo systemctl list-units —type service —all

Если вы хотите увидеть все установленные файлы модулей, а не только загруженные, используйте:

sudo systemctl list-unit-files

Systemd itself

Systemd — это относительно новый демон для инициализации пространства пользователя, который заменил собой традиционные системы init-скриптов SysV init и upstart, и теперь используется в большинстве современных дистрибутивах Linux.

Читайте также:  Тонкий и Толстый клиенты 1С: особенности, плюсы и минусы, различия

На моей ОС это подтверждается следующим образом:

rpm —query —file $(which init) # _64

И теперь при попытке использовать привычную команду service будет выведено следующее:

service avahi-daemon status # Redirecting to /bin/systemctl status

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

Про systemd следует прочитать отдельно, т. к. статья посвящена утилите systemctl — пользовательскому интерфейсу к демону systemd.

Управление модулями

До сих пор мы работали со службами и отображали информацию о модулях и файлах модулей, о которых знает systemd. Однако мы можем узнать более конкретную информацию о модулях, используя некоторые дополнительные команды.

Отображение файла модуля

Чтобы отобразить файл модуля, который система systemd загрузила в систему, можно использовать команду cat (она была добавлена в версию systemd 209). Например, чтобы увидеть файл модуля демона-планировщика atd, можно ввести следующее:

  • systemctl cat

Output[Unit] Description=ATD daemon [Service] Type=forking ExecStart=/usr/bin/atd [Install] WantedBy=

Вывод — это файл модуля, известный выполняемому в настоящее время процессу systemd. Это может быть важно, если вы недавно модифицировали файлы модуля или если вы переопределяете определенные опции во фрагменте файла модуля (мы рассмотрим это позже).

Отображение зависимостей

Чтобы увидеть дерево зависимостей модуля, можно использовать команду list-dependencies:

  • systemctl list-dependencies

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

├─ └─ ├─ ├─ ├─ ├─ ├─ ├─ ├─ ├─ . . .

Рекурсивные зависимости отображаются только для модулей .target, которые указывают состояние системы. Чтобы рекурсивно перечислить все зависимости, добавьте флаг —all.

Чтобы отобразить обратные зависимости (модули, зависящие от указанного модуля), можно добавить в команду флаг —reverse. Другие полезные флаги —before и —after могут быть использованы для отображения модулей, которые зависят от указанного модуля, соответственно, перед ними и после.

Проверка свойств модуля

Чтобы увидеть свойства более низкого уровня модуля, можно использовать команду show. При этом будет выведен список свойств, заданных для указанного модуля с помощью формата key=value:

  • systemctl show
Читайте также:  chmod — команда изменения прав файлов и папок в linux

OutputId= Names= Requires= Wants= WantedBy= Conflicts= Before= After= Description=OpenSSH server daemon . . .

Если вы хотите отобразить одно свойство, можно передать флаг -p с именем свойства. Например, чтобы увидеть конфликты, которые есть у модуля , можно ввести следующее:

  • systemctl show -p Conflicts

OutputConflicts=

Маскировка и снятие маскировки модулей

В разделе управления службами мы узнали, как остановить или отключить службу, но systemd также имеет возможность отметить модуль как полностью незапускаемый, автоматически или вручную, связав его с /dev/null. Это называется маскировкой модуля, и она возможна с помощью команды mask:

  • sudo systemctl mask

Это не позволит запустить службу Nginx автоматически или вручную, пока она замаскирована.

Если вы проверите list-unit-files, вы увидите, что служба теперь указана как замаскированная:

  • systemctl list-unit-files

Output. . . static static static static masked static static disabled static . . .

Если вы попытаетесь запустить службу, вы увидите следующее сообщение:

  • sudo systemctl start

OutputFailed to start : Unit is masked.

Чтобы снять маскировку модуля и сделать его доступным для использования снова, используйте команду unmask:

  • sudo systemctl unmask

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

Автозапуск через cron

Если вам с какой-то периодичностью нужно запускать скрипт или команду, вы можете воспользоваться cron-ом:

crontab -e — открыть терминал для написания задания cron

И добавьте туда нужное вам задание, например:

* * * * * /root/ — запускать скрипт каждую минуту.

Можно написать скрипт watch-dog, который по заданию будет проверять, например, статус какого-либо сервиса и, если он не работает, запускать его. На нескольких своих проектах я использую подобную схему.

Чтобы вывести список всех заданий в крон, нужно выполнить команду:

# crontab -l

* * * * * /root/

Допустимые значения для времени запуска заданий cron по порядку:

  • Минуты от 0 до 59
  • Часы от 0 до 59
  • День месяца от 1 до 31
  • Месяц от 1 до 12
  • День недели от 0 до 7 (0 или 7 это воскресение)
Читайте также:  Root Linux — инструкции учетной записи суперпользователя

В нашем задании скрипт запускается каждую минуту, поэтому там стоят «*».

Так же вы можете разместить нужный вам скрипт в директориях cron:

  • / – выполнение скрипта ежедневно
  • / – выполнение скрипта ежечасно
  • / — выполнение скрипта ежемесячно
  • / — выполнение скрипта еженедельно

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

Заключение

Уже много лет не утихают споры, нужен ли systemd как замена init. Доводы двух сторон имеют право на существование, однако они всё дальше уходят от конкретики в дебри философии Linux. Systemd многие популярные дистрибутивы сделали системой инициализации по умолчанию, это уже та причина-минимум, почему стоит её освоить. Фактически она стала стандартом. В рамках одной статьи невозможно сполна раскрыть тему, потому мы старались своими словами и доступно объяснить читателю азы, которые уже можно применить на практике и которые поспособствуют старту к углубленному изучению systemd. Залог стабильной работы сервера — глубокое понимание работы его служб, их взаимодействия и тонкая конфигурация под свои задачи. Для более глубокого изучения, мы рекомендуем прочитать замечательный перевод книги Леннарта Пёттеринга, разработчика systemd.

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

Дата:
Твитнуть
Рекомендуемые статьи по теме:
  • Как установить и использовать Docker c Portainer на Debian 10
  • Как мониторить сервер с помощью Zabbix?
  • Virtual Network Computing (VNC) — система удалённого доступа. Описание, установка, особенности
  • VPS (VDS) что это?
  • Установка SSL-сертификата в Nginx с наивысший защитой А+

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами: Please enable JavaScript to view the comments powered by Disqus. comments powered by Disqus