SysVinit работает так. Сценарии инициализации для каждого пакета находятся в /etc/init.d. Ссылки на эти скрипты находятся в /etc/rcS.d и /etc/rc[0-6].d. Эти ссылки начинаются с S (начало) или K (уничтожение) и двухзначного числа.
Когда система загружается и запускается процесс SysVinit, он просматривает /etc/rcS.d и выполняет сценарии, начиная с S, упорядоченные по номеру. (Я полагаю, что он передает аргумент "start" сценариям, но я не уверен.)
После обработки всех сценариев /etc/rcS.d система начинает переходить на определенный уровень выполнения. В Ubuntu при загрузке с обычного рабочего стола уровень запуска по умолчанию равен 2. Так что SysVinit выглядит в /etc/rc2.d и
- останавливает все сервисы со ссылками, начинающимися с K, упорядоченными по номеру; а также
- запускает все сервисы со ссылками, начинающимися с S, упорядоченными по номеру.
Если вы вместо этого загрузились в режиме восстановления Ubuntu, вы загрузитесь до уровня запуска 1. После запуска всех служб уровень запуска системы официально устанавливается.
Наконец, система запускает скрипт /etc/rc.local.
Если вы переключите уровни выполнения позже, SysVinit запустит тот же базовый процесс: он не проверяет /etc/rcS.d, но переходит непосредственно к обработке ссылок в /etc/rcN.d (где N - это тот, который вводится на уровне запуска).
Вы также можете написать сценарий Upstart. Я писал об Upstart ранее, так что проверьте там для более подробной информации. Upstart-скрипты хранятся в /etc/init ; чтобы написать их, просмотрите существующие сценарии, чтобы понять, как они работают, и прочитайте справочную страницу init(5).