21

В 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.

4 ответа4

10

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 запускается при запуске. Но другие предметы могут выглядеть сложнее. (Но, к счастью, человек читается :-))

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.

0

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .