перечислите включенные сервисные экземпляры

Я хотел бы перечислить все включенные сервисные экземпляры.

Следующие списки включили сервисы, но только показывают сервис и не отдельный экземпляр:

systemctl list-unit-files --state=enabled

Следующие списки все рабочие экземпляры:

systemctl list-units --state=running

Я ожидал бы, что что-то как следующее покажет включенный экземпляры:

systemctl list-units --state=enabled

Но это не работает.

Так, если я запускаю два сервисных экземпляра с:

systemctl start foo-service@primary
systemctl start foo-service@secondary

... но затем я только включаю тот:

systemctl enable foo-service@secondary

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

ls /etc/systemd/system/multi-user.target.wants/

Но это кажется очень клуджем-y. Существует ли systemd способ сделать это? Версия 232, если она имеет значение.

2
задан 10 October 2017 в 21:51

2 ответа

Можно использовать 'grep', чтобы искать и перечислить включенные сервисы

systemctl list-unit-files | grep enabled
0
ответ дан 2 December 2019 в 08:31

Одно из решений, которое я нашел, заключалось в том, чтобы вывести список всех модулей (который будет включать все экземпляры шаблонной службы) и использовать xargs для запуска команды для каждого модуля (проверяя, включен ли каждый из них) :

$ systemctl list-units --no-legend | awk '{print $1}' | xargs -I % sh -c 'echo "%: $(systemctl is-enabled %)"'
auditd.service: enabled
chronyd.service: enabled
crond.service: enabled
...

Чтобы объяснить, что здесь происходит:

  • systemctl list-units --no-legend : Вывести список всех модулей systemd, не показывая заголовки в верхней части вывода

  • awk '{print $ 1} ': выведите первую часть каждой строки, которая является именем модуля

  • xargs -I% sh -c' echo "%: $ (systemctl is-enabled%)" ' : Запускает команду для строки конвейерного ввода. Будет отображено имя модуля, за которым последует вывод systemctl is-enabled .

3
ответ дан 5 February 2020 в 13:00

Другие вопросы по тегам:

Похожие вопросы: