Некоторое время я работаю с linux, но довольно просто.
Я понимаю, что скрипты в init.d выполняются при запуске ОС, но как именно это работает?
Как операционная система узнает, какой параметр передать скрипту?
Чтобы запустить apache, я бы сделал sudo /etc/init.d/apache2 start. Если я запускаю sudo /etc/init.d/apache2, он не работает без запуска. Как запускается передача ОС скрипту?
В зависимости от вашего дистрибутива и выпуска 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 и upstart.
Я предлагаю вам прочитать учебник о том, как работают уровни запуска и сценарии инициализации - http://www.debian-administration.org/article/212/An_introduction_to_run-levels кажется вполне понятным.
Короче говоря, сценарии вызываются не напрямую, а через символические ссылки в каталогах /etc/rc.d, где n = уровень выполнения. Имена символических ссылок имеют следующий формат:
[K | S] + nn + [string]
где nn - это число, обозначающее порядок, в котором запускаются сценарии (сначала меньшие числа), а K или S определяют, запускать сценарий с параметром «стоп» или «запуск».