Как операционная система знает, какой параметр передать в /etc/init.d/?
Я работал с Linux некоторое время, но довольно просто.
Я понимаю, что сценарии в init.d выполняются при запуске ОС, но как именно это работает?
Как ОС знает, какой параметр передать сценарию?
Для запуска apache я бы сделал sudo /etc/init.d/apache2 start. Если я запускаю sudo /etc/init.d/apache2, он не работает без запуска. Как ОС передает начало скрипту?
2 ответа
В зависимости от вашего дистрибутива и выпуска Linux, в конечном счете, скрипты sysvinit (эти скрипты в /etc/init.d/) обычно запускаются из символических ссылок, которые существуют в /etc/rc[0-6S].d, от /etc/init.d/rc,
Под Ubuntu вы либо используете старый стиль sysvinitили совсем недавно, upstart, В каталоге управления выскочкой (/etc/events.d/) вы найдете устаревший режим, который возвращается к /etc/init.d/rc призывание. Иначе, /etc/init.d/rc вызывается для каждого уровня запуска через /etc/inittab,
Если вы изучите логику /etc/init.d/rcвы найдете, что он определяет действия в зависимости от уровня запуска (0 & S безусловно остановлены) или префикс скрипта (S[0-9][0-9]* скрипты запускаются, K[0-9][0-9]* (убить) скрипты останавливаются). Нумерация скриптов в каталоге уровня запуска (например: /etc/rc1.d/) определяет порядок остановки или запуска скриптов. Сначала запускаются сценарии убийства, затем запускаются сценарии.
Подробнее об этом, исследования sysvinit и выскочки.
Я предлагаю вам прочитать некоторые учебные пособия о том, как работают уровни выполнения и сценарии инициализации - http://www.debian-administration.org/article/212/An_introduction_to_run-levels кажется вполне понятным.
Короче говоря, сценарии вызываются не напрямую, а через символические ссылки в каталогах /etc/rc.d, где n = уровень запуска. Имена символической ссылки имеют следующий формат:
[K | S] + nn + [string]
где nn - число, обозначающее порядок запуска сценариев (сначала меньшие числа), а K или S определяет, следует ли запускать сценарий с параметром "stop" или "start".