Systemd служба – что такое multi-user.target

Вопрос или проблема

Я наткнулся на .service, который содержит следующее:

[Install]
WantedBy=multi-user.target

Оригинальный файл .service можно найти здесь.

Каково значение multi-user.target?

Я использую Ubuntu 16.04 LTS.

multi-user.target означает, что системная служба systemd начинает работать, когда система достигает уровня запуска 2.

В дополнение к ответу вот таблица целей и их уровней запуска:

Уровень запуска Целевая единица                            Описание
0             runlevel0.target, poweroff.target             Выключение и выключение питания
1             runlevel1.target, rescue.target               Настройка спасательной оболочки
2,3,4         runlevel[234].target,                       Настройка многопользовательской оболочки без графики
              multi-user.target
5             runlevel5.target, graphical.target            Настройка графической многопользовательской оболочки
6             runlevel6.target, reboot.target               Выключение и перезагрузка системы

Это механизм обработки зависимостей в Systemd.
multi-user.target является альтернативой для runlevel 3 в мире SystemV.

Следовательно, достижение multi-user.target включает в себя запуск службы Confluent ZooKeeper.

Это именно то, что вам нужно.

Я нашел этот учебник landoflinux.com самым простым для понимания. Вы можете самостоятельно выполнить следующую команду, чтобы увидеть, что там:

$ ls -al /lib/systemd/system/runlevel*
lrwxrwxrwx. 1 root root 15 Apr 25 10:31 /lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Apr 25 10:31 /lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Apr 25 10:31 /lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Apr 25 10:31 /lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Apr 25 10:31 /lib/systemd/system/runlevel6.target -> reboot.target

Но вам, возможно, стоит просто ознакомиться с вопросом принятый ответ о целях.

tldr, если служба требуется для multi-user.target, служба требует ряд других служб, необходимых для запуска многопользовательской сессии без графики (см. необходимые службы в таблице ниже).

$ man systemd.special
...
multi-user.target

    Специальная целевая единица для настройки многопользовательской системы (без графики). Это подразумевается графической целью.

    Единицы, необходимые для многопользовательской системы, должны добавлять зависимости Wants= для своей единицы в эту единицу во время установки. Это лучше всего настраивается через WantedBy=multi-user.target в разделе [Install] единицы.
...

Службы, необходимые этой цели, можно найти в таблице ниже:

                             cryptsetup-pre.target veritysetup-pre.target
                                                  |
(разные низкоуровневые                                v
 API VFS монтирования:         (разные устройства cryptsetup/veritysetup...)
 mqueue, configfs,                                |    |
 debugfs, ...)                                    v    |
 |                                  cryptsetup.target  |
 |  (разные swap                                 |    |    remote-fs-pre.target
 |   устройства...)                                  |    |     |        |
 |    |                                           |    |     |        v
 |    v                       local-fs-pre.target |    |     |  (сетевые файловые системы)
 |  swap.target                       |           |    v     v                 |
 |    |                               v           |  remote-cryptsetup.target  |
 |    |  (разные низкоуровневые  (разные монтирования и  |  remote-veritysetup.target |
 |    |   службы: udevd,    fsck службы...)   |             |              |
 |    |   tmpfiles, random            |           |             |    remote-fs.target
 |    |   seed, sysctl, ...)          v           |             |              |
 |    |      |                 local-fs.target    |             | _____________/
 |    |      |                        |           |             |/
 \____|______|_______________   ______|___________/             |
                             \ /                                |
                              v                                 |
                       sysinit.target                           |
                              |                                 |
       ______________________/|\_____________________           "https://unix.stackexchange.com/"        |      |               \          |
      |              |        |      |               |          |
      v              v        |      v               |          |
 (разные       (разные      |  (разные            |          |
  таймеры...)      пути...)   |   сокеты...)        |          |
      |              |        |      |               |          |
      v              v        |      v               |          |
timers.target  paths.target   |  sockets.target      |          |
      |              |        |      |               v          |
      v              \_______ | _____/         rescue.service   |
                             \"https://unix.stackexchange.com/"          |
                              v                      v          |
                          basic.target         rescue.target    |
                              |                                 |
                      ________v____________________             "https://unix.stackexchange.com/"              \            |
                     |              |              |            |
                     v              v              v            |
                 display-    (разные системные   (разные системные  |
             manager.service     службы        службы)      |
                     |         необходимые для        |            |
                     |        графических интерфейсов       v            v
                     |              |            multi-user.target
emergency.service    |              |              |
        |            \_____________ | _____________/
        v                          \|/
emergency.target                    v
                              graphical.target

источник

Список зависимостей также можно найти с помощью

$ systemctl list-dependencies multi-user.target

TL;DR

multiuser.target – это системная настройка, основанная на терминале, предназначенная только для использования на системах, которые не имеют или не требуют графической среды рабочего стола. Например, кластеры.

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

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

Ответ или решение

Что такое multi-user.target в системе Systemd?

multi-user.target представляет собой специальную цель (target) в рамках системы инициализации Systemd, предназначенную для настройки системы в режим многопользовательского использования без графической оболочки (интерфейса). Это является эквивалентом уровня запуска (runlevel) 3 в традиционной системе инициализации SysV, которая была распространена в более старых дистрибутивах Linux. Если вы встретили файл .service, который содержит строку:

[Install]
WantedBy=multi-user.target

это означает, что данный сервис будет автоматически запущен, когда система достигнет состояния multi-user.target.

Краткий обзор целей Systemd

Чтобы лучше понять, как работает multi-user.target, полезно ознакомиться с таблицей соответствия уровней запуска и целей:

Уровень Цель Описание
0 runlevel0.target Выключение и отключение питания
1 runlevel1.target Настройка режима восстановления (rescue shell)
2, 3, 4 runlevel[234].target Настройка многопользовательского терминала без графики
5 runlevel5.target Настройка многопользовательского интерфейса с графикой
6 runlevel6.target Выключение и перезагрузка системы

Как видно из таблицы, multi-user.target относится к уровням, обеспечивающим работу нескольких пользователей в терминальной среде.

Зависимости и требования

Цель multi-user.target определяет набор зависимостей, необходимых для функционирования системы без графического окружения. Сервисы, предназначенные для работы в этом режиме, должны добавлять зависимости Wants= для своей установки. Это делается для того, чтобы при активации multi-user.target автоматически запускались все необходимые службы.

Например, службы, которые запускаются в момент активации multi-user.target, можно просмотреть с помощью команды:

systemctl list-dependencies multi-user.target

Таким образом, если служба, как в вашем случае с ZooKeeper, указана в зависимости от или предназначена для multi-user.target, она будет автоматически запускается при достижении этого состояния.

Заключение

В общем, multi-user.target — это стандартная конфигурация для систем, которые работают без графической среды. Это может быть особенно полезно для серверов и кластеров, где управление осуществляется через терминал. Если ваша служба была установлена с зависимостью от multi-user.target, это указывает на то, что она предназначена для работы в многопользовательской терминальной среде, что соответствует ожиданиям функциональности, предусмотренной для серверных систем.

Оцените материал
Добавить комментарий

Капча загружается...