В Ubuntu есть команда, чтобы показать список ВСЕХ служб автозапуска?

22

В Ubuntu

  1. Есть ли команда, чтобы показать список всех служб автозапуска?
  2. Есть ли команда, чтобы проверить, запускается ли служба во время загрузки или нет?

Я сделал Google и IRC. Я не могу найти ответ. Возможно, в Ubuntu таких команд не существует. Вначале я думал, что все запущенные службы будут недоступны /etc/rc2.d/, но я ошибался в этом. Некоторые из них настроены только под /etc/init/*.conf. Затем я попробовал chkconfigинструмент (установил его вручную), он не работает все время. Например, он дает неправильный результат, для mongodbкоторого автоматически запускается /etc/init/mongodb.conf.

service --status-allи initctl listможет сообщать только текущий статус сервисов вместо статуса автозапуска. update-rc.dкоманда для изменения статуса автозапуска вместо отображения статуса

Если на мой вопрос нет ответа, мне просто интересно, почему так сложно проверить сервисы автозапуска в Ubuntu.

SSS
источник
Я думаю, что chkconfig --listбудет работать правильно? onозначает, что служба работает на этом уровне выполнения, и эта служба автоматически запускается при загрузке системы.
максимум
1
Что я написал в своем вопросе, chkconfig не всегда работает. например, это даст неверный результат для mongodb. Я думаю, что это возможно, потому что mongodb использует /etc/init/mongodb.conf для автоматического запуска.
SSS
Как насчет ls /etc/rc?.d?
Toxaq

Ответы:

11

Ubuntu использует Upstartвместо традиционной initсистемы. Upstart сильнее, чем init, но он немного сложнее, чем init.

Upstart, напротив, основан на событиях. «Событие» может быть чем-то вроде «загрузки» ... или может быть более конкретным, например, «сеть готова к использованию сейчас». Вы можете указать, какие сценарии зависят от каких событий. Все, что не ожидает события, может запускаться, когда есть доступный процессор.

Эта система, основанная на событиях, имеет еще одно преимущество: теоретически вы можете использовать ее даже после того, как система запущена и работает. Upstart в конечном итоге должен взять на себя такие задачи, как или подключение внешних устройств, таких как флэш-накопители (в настоящее время обрабатываются udev и hal) или запуск программ в определенное время (в настоящее время обрабатывается cron).

Как вы должны знать сейчас, мертвый демон (который не запускается при запуске) может быть жив и запускается из-за события.

В Ubuntu есть и / etc / init для Upstart, и /etc/init.d для старых файлов SysV. Некоторые файлы в нем являются обычными сценариями SysV Init, которые еще не были перенесены. Но некоторые сервисы, которые были перенесены, поддерживают ссылку из /etc/init.d на / lib / init / upstart-job. Если вы запускаете один из них, он работает, но сначала выводит предупреждение:

Вместо того, чтобы вызывать сценарии инициализации через /etc/init.d, используйте утилиту service (8), например service mysql restart

Поскольку скрипт, который вы пытаетесь вызвать, был преобразован в задание Upstart, вы также можете использовать утилиту restart (8), например, restart mysql.

На машине Upstart init происходит от upstart. Вместо запуска основного сценария rc, который вызывает сценарии для определенного уровня выполнения, init-upstart берет задания из своего каталога заданий.

Теперь мы знаем, что не существует простого способа перечисления демонов автозапуска, вы должны перечислить все демоны и проверять их по одному. Демон может быть запущен initили upstartдаже позднее. Самый простой способ получить этот список - запустить эту команду в оболочке:

initctl show-config

Вывод выглядит так:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Некоторые элементы, такие как первый, очень просты, hostnameзапускаются при запуске. Но другие предметы могут выглядеть сложнее. (Но, к счастью, человек читается :-))

Ehsan
источник
Я знал большую часть того, что ты написал. Хотя есть что-то новое, чего я не знаю, они все равно не могут решить мою проблему. Я просто хотел бы знать, есть ли команда, которая может сделать работу легко (как для upstart, так и для служб init). Кажется, в Ubuntu его нет. Как жаль! Кстати, initctl может обрабатывать только сервисы upstart, а не традиционную систему init. Если нет простого пути, то я должен использовать трудный путь ... спасибо.
SSS
Хочу заметить, хотя не правильные современные версии ubuntu перешли на systemd. Забавно, хороший кусок этого ответа по-прежнему в силе
подмастерье Компьютерщик
новые версии Ubuntu не используют upstart, а systemd unix.stackexchange.com/a/287282/147671
Жоао Пиментел Феррейра,
5

На самом деле, все сервисы доступны только в /etc/init.d:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Еще одна вещь, все сервисы присутствуют rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.dтакже, но это только символическая ссылка /etc/init.d.

Смотрите здесь, это содержание rc1.dкаталога:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Здесь вы можете увидеть символическую ссылку на init.d (K15pulseaudio -> ../init.d/pulseaudio).

Но здесь каждый сервис связан с init.d, верно? Но каждый сервис не запустится; причина в двух сценариях.

Первый - это S- скрипт (S30killprocs) ---> start

Второй - скрипт k (K15pulseaudio) ---> kill

Все службы сценариев K уничтожают службы, и все службы сценариев S запускают службы для этого уровня выполнения.

Вкратце

S70dns-clean -> ../init.d/dns-cleanзапустить dns-cleanслужбу на уровне выполнения 1.

K15pulseaudio -> ../init.d/pulseaudioубивает pulseaudioслужбу на уровне выполнения 1.

Максимум
источник
Не верно для выскочки услуг, которые могут не появляться здесь вообще.
подстановочный
2

Вы можете установить sysv-rc-conf, программу ncurses, чтобы графически настроить / показать уровни rc.

dseira
источник
0

Есть ли команда, чтобы показать список всех служб автозапуска?

Смотрите здесь: update-rc-d-шпаргалка

Есть ли команда, чтобы проверить, запускается ли служба во время загрузки или нет?

Ни одного, я знаю (что ничего не значит;), но вы можете начать читать здесь: askubuntu forum - служба зависимости

StefanKaerst
источник