Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
30.2.4. Программа /sbin/init
Программа
/sbin/init
(также init
) координирует оставшуюся часть процесса загрузки и выполняет настройку окружения пользователя.
Выполняемый процесс
init
становится родительским по отношению ко всем автоматически запускаемым в системе процессам. Сначала он запустит сценарий /etc/rc.d/rc.sysinit
, который задает путь окружения, стартует пространство подкачки, проверяет файловые системы и выполняет все необходимые для инициализации системы шаги. К примеру, для инициализации аппаратных часов rc.sysinit
считывает файл конфигурации /etc/sysconfig/clock
, а для инициализации отдельных процессов серийного порта выполняет файл /etc/rc.serial
.
The
init
command then runs the /etc/inittab
script, which describes how the system should be set up in each SysV init runlevel. Runlevels are a state, or mode, defined by the services listed in the SysV /etc/rc.d/rc<x>.d/
directory, where <x> is the number of the runlevel. For more information on SysV init runlevels, refer to Раздел 30.4, «Уровни выполнения SysV Init».
Далее
init
задает библиотеку системных функций /etc/rc.d/init.d/functions
, использующихся при запуске, завершении и определении номера процесса (PID) приложений.
init
проверяет уровень выполнения в /etc/inittab
и выполняет запуск всех фоновых процессов из соответствующего каталога rc
. Каталоги rc
пронумерованы соответственно уровням выполнения. Например, /etc/rc.d/rc5.d/
соответствует уровню выполнения 5.
При загрузке в 5-ый уровень
init
попытается найти каталог /etc/rc.d/rc5.d/
, чтобы определить процессы для запуска и остановки.
Ниже приведен пример содержимого каталога
/etc/rc.d/rc5.d/
:
K05innd -> ../init.d/innd K05saslauthd -> ../init.d/saslauthd K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local
Как показано в примере,
/etc/rc.d/rc5.d/
не содержит запускающих или останавливающих службы сценариев. Все файлы из /etc/rc.d/rc5.d/
представляют собой символические ссылки на сценарии, расположенные в каталоге /etc/rc.d/init.d/
. Символические ссылки используются во всех каталогах rc
, чтобы сделать возможной перенастройку уровней выполнения путем создания, изменения и удаления этих ссылок, не оказывая тем самым влияния на сами сценарии.
Название каждой символической ссылки начинается либо с
K
, либо с S
. K
(kill) обозначает процессы, работа которых будет завершена на данном уровне, а S
(start) — запускаемые процессы.
The
init
command first stops all of the K
symbolic links in the directory by issuing the /etc/rc.d/init.d/<command> stop
command, where <command> is the process to be killed. It then starts all of the S
symbolic links by issuing /etc/rc.d/init.d/<command> start
.
Примечание
После завершения загрузки будет возможно войти в систему в качестве пользователя root и выполнить эти же сценарии запуска и остановки служб. Например, для остановки сервера Apache HTTP надо выполнить команду
/etc/rc.d/init.d/httpd stop
.
Символические ссылки пронумерованы по порядку их запуска и остановки. Этот порядок может быть изменен путем модификации номера; чем меньше число, тем раньше будет запущена служба. В случае, если число совпадает, порядок служб будет определяться по алфавиту.
Примечание
One of the last things the
init
program executes is the /etc/rc.d/rc.local
file. This file is useful for system customization. Refer to Раздел 30.3, «Выполнение дополнительных программ во время загрузки» for more information about using the rc.local
file.
After the
init
command has progressed through the appropriate rc
directory for the runlevel, the /etc/inittab
script forks an /sbin/mingetty
process for each virtual console (login prompt) allocated to the runlevel. Runlevels 2 through 5 have all six virtual consoles, while runlevel 1 (single user mode) has one, and runlevels 0 and 6 have none. The /sbin/mingetty
process opens communication pathways to tty devices[14], sets their modes, prints the login prompt, accepts the user's username and password, and initiates the login process.
На пятом уровне
/etc/inittab
выполняет сценарий /etc/X11/prefdm
.\nprefdm
запускает X менеджер[15] — gdm
, kdm
или xdm
в зависимости от заданного в файле /etc/sysconfig/desktop
.
По завершению система будет работать на уровне выполнения 5, и будет отображен экран входа.