Вопрос или проблема
Я наткнулся на .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
, это указывает на то, что она предназначена для работы в многопользовательской терминальной среде, что соответствует ожиданиям функциональности, предусмотренной для серверных систем.