Перечислите все службы, начиная с загрузки

15

Я ищу способ получить список всех сервисов (/etc/init.d или upstart или systemd), которые должны запускаться (или были запущены) при загрузке.

Как вы получаете список всех стартовых услуг? - Я знаю этот вопрос, и он предлагает использовать service --status-all.

Но это не показывает мне, какие услуги должны быть запущены . Он вызывает все сценарии инициализации с statusаргументом " ". Это список всех служб, которые могут быть запущены.

Но я хотел бы знать, если служба, которая была запущена при загрузке, все еще работает.

Пример…

У меня установлены webfs. Но я не хочу, чтобы он работал при загрузке. Таким образом , я отключил его: sudo update-rc.d webfs disable. И у меня также установлена ​​Samba, и она должна работать при загрузке. Но это остановлено (по любой причине). sudo service --status-allне помогает мне здесь:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

Оба выключены, но я не понимаю, этот (самба) должен быть включен.

Так…

Как я могу получить список всех служб, которые запускаются при загрузке? И, как расширение, есть простой способ получить «статус» этих сервисов (если нет, я просто переберу этот список и запущу «service $ service status», или что-то вроде этого).

Спасибо Александр

Edit 2015-05-04: я нахожусь на Ubuntu 14.04.

Основное внимание в этом вопросе заключается в следующем:

Но я хотел бы знать, если служба, которая была запущена при загрузке, все еще работает.

Из-за этого initctl listне очень помогает. На самом деле он не учитывает сервисы, запускаемые /etc/init.dскриптами (по сравнению с выскриптовыми скриптами в /etc/init).

Также список /etc/rc?.d/S*не помогает. Это создаст список служб, которые могут быть запущены на заданном уровне выполнения. Это не показывает мне, если служба, которая должна была быть запущена, все еще работает.

По сути, я ищу что-то вроде svcs -xSolaris для Ubuntu. С помощью svcs -xя бы получил вывод, если служба, которая была запущена, больше не работает. Это мне понадобится и для Ubuntu.

Причина: я хотел бы иметь (более или менее ...) общую проверку для нашей системы мониторинга Icinga / Nagios, которая предупредила бы меня, если служба больше не работает, которая должна работать. Поскольку у нас есть много разных серверов для множества разных клиентов, на самом деле не требуется масштабировать список «важных» сервисов.

Александр Сквар
источник
Какая версия Ubuntu?
AB
@Parto Принятый ответ на этот вопрос: initctl listкакие процессы запускаются / работают, но этот список также включает процессы, которые запускаются вручную
Сергей Колодяжный,
@AB Я на Ubuntu 14.04.
Александр Сквар
@Parto askubuntu.com/questions/218/… не совсем дает ответ. Как писал @Serg, ответом было использование initctl list. Но это на самом деле не отвечает, так как это также показало бы запущенные вручную службы. И это не показывает сервисы, которые не работают.
Александр Сквар

Ответы:

19

Все сервисы запускаются при запуске:

initctl list

Список всех сервисов, которые существуют в системе:

service --status-all
kaxi1993
источник
Неправильно. Также не предоставьте список включенных служб (запущен при запуске). Они показывают все известные сервисы (некоторые из которых могут быть отключены) и работают ли они в данный момент (что не обязательно означает, что они запускаются автоматически).
Reinier Post
2

Вот мой лайнер grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Чуть более чистый выход может быть достигнут с grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Теперь давайте углубимся в детали. Работы Upstart все хранятся в /etc/init/, верно? У всех рабочих мест есть строки с указанием уровня запуска. Уровень запуска 2 - это обычный загрузчик, уровень запуска по умолчанию. Таким образом, если мы grep всех строк, которые говорят runlevelи очищают вывод grep с помощью awk, чтобы соответствовать только строкам с start onуровнем запуска # 2, мы получим список выскочивших заданий. Остальное только для форматирования потребностей, замените / в именах файлов на пробел и обрежьте путь к этим файлам, оставив сами имена файлов.

!/#/Часть по адресу , возможно , закомментированного стартовые директивы, которые я лично добавленных вручную.

Среди прочего, есть место /etc/rc2.d(если я правильно понимаю), у вас есть сценарии с меньшим приоритетом.

Сырая однострочка это: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Сценарии, которые в этой папке на самом деле выполняются на уровне выполнения 2, имеют имя, начинающееся с S, за которым следует номер приоритета. Теперь, в основном, мы получаем все файлы, начинающиеся с S, и просто перечисляем их только с именем с приоритетом (все еще нужно выяснить, как их очистить).

Как должным образом указано в комментариях в muru, есть также /etc/init/*.overrideфайлы, которые могут «.. .Modify, как работа будет выполняться без непосредственного изменения файла конфигурации» ( страница инициализации init )

В настоящее время, поскольку у меня нет большого опыта работы с этими файлами, я могу только предложить просмотреть эти файлы .override, используя 'grep' manual '/etc/init/*.override', чтобы вывести список служб, которые должны быть запущены. вручную с помощью initctlили servicesкоманд.

Сергей Колодяжный
источник
Обратите внимание, что из-за зависимостей событий трудно определить, приведет ли данная служба к запуску других служб. Там также небольшое дело .overrideфайлов.
Муру
@ Серж спасибо. Но это касается только выскочки. Также "ls /etc/rc2.d/* ..." не сильно помогает. Было бы показать, какие службы могли быть запущены. Но это не показывает, какие службы все еще работают. Я думаю, суть моего поста не ясна. Я ищу: Но я хотел бы знать, если служба, которая была запущена при загрузке, все еще работает. Не знаю, знаете ли вы Солярис. Там я просто сделал бы «svcs -x», и если он что-то возвращает, я знаю, что что-то не работает. Мне нужно что-то подобное для Ubuntu.
Александр Сквар
Ну, можно написать скрипт или функцию bashrc, чтобы сравнить результаты одного моего лайнера и списка initctl. Хотите, чтобы я опубликовал это?
Сергей Колодяжный
@ Серж хорошо - если вы предлагаете;)
Александр Сквар
2

Перечислите все сервисы и соответствующий статус уровня выполнения - стиль chkconfig:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Интерактивное текстовое редактирование всего перечисленного:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

Возможно, придется установить его, если не там:

apt install sysv-rc-conf
bzean
источник