Назад | Перейти на главную страницу

systemd: как получить работающую цель

Вопрос в том, не просматривая и не разбирая службы, как мне узнать, что я работаю на multi-user.target после использования isolate ?

В systemd одновременно может быть более одной активной цели.

Чтобы просмотреть список всех активных целей:

systemctl list-units --type target --state active

Чтобы быстро узнать, есть ли у конкретной цели (например, user-defined.target) активен или нет:

systemctl is-active user-defined.target

Нет команды systemd для запроса запущенной цели или последней цели, использованной с isolate.

systemd поставляется с командой под названием runlevel для совместимости со старыми системами. Это предотвратит текущий "уровень выполнения". Концепция устарела, но, как видно из man runlevel, определенные уровни выполнения соответствуют определенным целям systemd. Эта команда может быть полезна, пока используются стандартные цели. Было бы бесполезно, если бы использовалась настраиваемая цель, которая не соответствовала устаревшему уровню запуска.

Подробнее об обходных путях можно прочитать на [https://www.centos.org/forums/viewtopic.php?t=54347 impression(CentOS Форум).

Вот лучший способ узнать ваш текущий целевой режим.

аварийный - после выполнения команды systemctl list-units --type target аварийная цель

спасение - после выполнения команды systemctl list-units --type target спасательная цель

многопользовательский - после выполнения команды systemctl list-units --type target многопользовательская цель

Как и в ранее упомянутом ответе, вы можете использовать:

systemctl list-units --type target | egrep "eme|res|gra|mul" | head -1

В результате вы получите свою текущую цель.

Если вы установили модуль, в названии которого есть одна из этих четырех строк выше, вы можете добавить ^ персонаж перед ними - egrep "^eme|^res|^gra|^mul"

К сожалению, ни один из этих ответов не указывает, какой уровень запуска в настоящее время активен. Все они показывают в моем случае, что оба multi-user.target и graphical.target загружены / активны. Пока только runlevel Команда указывает текущий уровень выполнения.

runlevel | awk '{print $2}'