Я в настоящее время смотрю на запуск и процедуры завершения работы ubunut точного ящера. Насколько я понимаю на завершении работы, система переключается на runlevel 0 и все сценарии с K*
выполняются с аргументом stop
и все сценарии с S*
выполняются с аргументом start
.
Теперь взгляд на rc.0
Я вижу следующие сценарии:
lrwxrwxrwx 1 root root 16 1. Jan 2000 K20dhcpcd -> ../init.d/dhcpcd
lrwxrwxrwx 1 root root 20 1. Jan 2000 S35networking -> ../init.d/networking
lrwxrwxrwx 1 root root 14 5. Apr 2013 S90halt -> ../init.d/halt
lrwxrwxrwx 1 root root 20 5. Apr 2013 S60umountroot -> ../init.d/umountroot
lrwxrwxrwx 1 root root 18 5. Apr 2013 S40umountfs -> ../init.d/umountfs
lrwxrwxrwx 1 root root 22 5. Apr 2013 S31umountnfs.sh -> ../init.d/umountnfs.sh
lrwxrwxrwx 1 root root 17 5. Apr 2013 S30urandom -> ../init.d/urandom
lrwxrwxrwx 1 root root 18 5. Apr 2013 S20sendsigs -> ../init.d/sendsigs
lrwxrwxrwx 1 root root 19 26. Aug 2013 K90syslog-ng -> ../init.d/syslog-ng
Что означает umountfs
, sendsigs
и halt
будет выполняться с аргументом start
.
Но смотря на код, например, в S90halt
Я нахожу следующее:
case "$1" in
start)
# No-op
;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
do_stop
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
Т.е. этот сценарий ничего не делает, когда с этим называют start
и только на самом деле останавливает систему, когда с этим называют stop
. Я не могу найти ссылку на этот сценарий как сценарий уничтожения, поэтому когда это происходит?
Согласно новомодной поваренной книге Ubuntu:
Ubuntu в настоящее время использует гибридную систему, где базовые сервисы обрабатываются Выскочкой, но дополнительные услуги могут быть выполнены в режиме SystemV прежней версии. Это может казаться нечетным, но полагать, что существуют тысячи пакетов, доступных в Ubuntu через репозитории Вселенной и Мультивселенной и сотни сервисов. Чтобы избежать необходимости изменять каждый пакет для работы с Выскочкой Выскочка позволяет пакетам использовать свой существующий SystemV (и таким образом Debian-совместимый) сценарии.
SystemV используют уровень выполнения для управления системным запуском, завершением работы и перезагрузкой.
В /etc/init.d
существующие сценарии, которые останавливается/начинает сервис дескрипторов, это пишет сценарий, следуют /etc/init.d/skeleton
и выполняются системой каждый раз runlevel изменение.
Уровень выполнения пронумерован от 0 до 6 и в /etc
мы нашли rcX.d
папка, один для каждого уровня.
В этих папках существующая символьная ссылка на сценарии в /etc/init.d
, поскольку Вы видели, что название этой ссылки конкретно: они запускают с S, или K (S средства запускаются, и средства K Уничтожают), сопровождаемый числом и названием службы.
Когда системная команда изменяет значение runlevel, сценарии в rcX.d каталоге называют, выполняя алфавитный приказ: K сценарии с параметром остановки, S сценарий с запуском. Это правило не относится к двум runlevels 0 (останов) и 6 (перезагрузка). Согласно Главе 9 Руководства политики Debian - Операционная система
В этих runlevels ссылки с префиксом S все еще называют после тех, которые имеют префикс K, но их также называют с остановкой отдельного аргумента.
Так вот почему системный останов.
Эта тема очень широка, я надеюсь, что это небольшое объяснение является достаточно четким.