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