run-level
Posted by tsstahl in the Debian section on Fri 12 Aug 2005 at 14:26
'runlevel' определяет , какие программы выполняются во время system
startup.
Linux run levels - это числа от 0 до 6. Почему остановились на 6 ?
На то есть исторические причины.
В следующей таблице приведен список run levels:
* 0 System Halt
* 1 Single user
* 2 Full multi-user mode (Default)
* 3-5 Same as 2
* 6 System Reboot
Исключая начальный этап загрузки , система может переходить из одного runlevel к другому .
Special Run Levels
Ну , 0 - это понятно , останов системы.
X86-процессоры поновее просто вырубают питание при достижении run level = 0 .
X86-процессоры постарее будут выводить мессагу .
Run Level 1 - 'single user' режим. Его можно перевести как
'отладочный' . В этом режиме нет запущенных демонов .
(В этот режим можно попасть с помощью boot loader, lilo или grub ).
Уровни со 2 по 5 - это многопользовательские режимы , которые являются режимом
по умолчанию в стандартных дистрибутивах .
3-й уровень изпользуется для консоли и 5-й для иксов.
6-й используется для reboot.
Есть еще один уровень - 'S' , который система использует по своему усмотрению.
Where Does a Run Level Live?
Как и все в Linux , run levels прописаны в файловой системе.
Их можно найти в /etc каталоге :
/etc/rc0.d Run level 0
/etc/rc1.d Run level 1
/etc/rc2.d Run level 2
/etc/rc3.d Run level 3
/etc/rc4.d Run level 4
/etc/rc5.d Run level 5
/etc/rc6.d Run level 6
Содержимое rcX.d каталога определяет, что происходит для данного run level.
(S)tart files, (K)ill files
Давайте глянем на run level 2 .
Содержимое rc2.d каталога:
S10sysklogd S20cupsys S20mailman S20usermin S91apache S99xdm
S11klogd S20exim4 S20makedev S20xfs S91apache2
S14ppp S20fam S20pcmcia S20xprint S99gdm
S18portmap S20hylafax S20samba S89atd S99rmnologin
S20acpid S20inetd S20ssh S89cron S99stop-bootlogd
Каждый файл - это символическая ссылка на скрипт в каталоге /etc/init.d ,
которая контролирует определенный демон.
(Смотрите как можно добавить свой скрипт)
Эти символические ссылки имеют формат :
[K | S] + nn + [string]
[string] - это имя исполняемого прилинкованного файла .
'nn' цифры 01-99;чем меньше номер , тем раньше запускается программа.
K - Kill, S - Start.
Когда система приходит в следующий runlevel, будут выполняться скрипты ,
начинающиеся с S . То же самое верно и для K .
'S' вызывают программу со 'start'-параметром, 'K' - со 'stop' параметром.
Если демон уже запущен , он не будет снова запускаться .
Пример :
S20exim4 -> ../init.d/exim4
S20fam -> ../init.d/fam
S20hylafax -> ../init.d/hylafax
S20inetd -> ../init.d/inetd
S20mailman -> ../init.d/mailman
S20makedev -> ../init.d/makedev
S20pcmcia -> ../init.d/pcmcia
S20samba -> ../init.d/samba
S20ssh -> ../init.d/ssh
Как мы видим , программы запускаются в алфавитном порядке.
Transitioning Between Run levels
Когда вы покидаете runlevel, ничего не происходит.
Все случается , когда вы приходите в новый run level.
Каталог rcX.d :
rc2.d:
K01xdm S18portmap S20fam S20makedev S20usermin S89cron S99rmnologin
S10sysklogd S20acpid S20hylafax S20pcmcia S20xfs S91apache S99stop-bootlogd
S11klogd S20cupsys S20inetd S20samba S20xprint S91apache2 S99xdm
S14ppp S20exim4 S20mailman S20ssh S89atd S99gdm
rc3.d:
K01gdm S20acpid S20inetd S20ssh S89cron S99xdm
S10sysklogd S20cupsys S20mailman S20usermin S91apache
S11klogd S20exim4 S20makedev S20xfs S91apache2
S14ppp S20fam S20pcmcia S20xprint S99rmnologin
S18portmap S20hylafax S20samba S89atd S99stop-bootlogd
Взгляните внимательно на эти 2 каталога .
Сначала в конце 2-го run level мы запускаем S99gdm - графический дисплей-менеджер ,
а при входе в 3-й run-level мы его тут же прибиваем , ибо 3-й run level -
это уровень консоли по умолчанию.
That's great, but how do I change run levels?
Для определения текущего нужно запустить команду 'runlevel' :
ulsoho:/home/user1# runlevel
N 2
Команда для изменения levels - 'telinit'.
telinit 3
telinit в качестве аргумента может иметь : 0,1,2,3,4,5,6,'S'.
'S' - это то же самое , что и 1 , но лучше не делайте так.
A note of caution is warranted here. You can easily use the telinit command to reboot (run level 6), or shutdown (run level 0) the system, but it is not recommended.
Certain programs need special processing for an orderly shutdown.
Bypassing the expected shutdown sequence can have dire effects on your
data. Older _Unix_ systems are especially sensitive to shutdown/bootup
operations
The preferred method for a serious runlevel change is 'shutdown'. There are easier mnemonics, but in a running system they all point to the 'shutdown' command. You can use the 'halt', or 'poweroff' command to stop a system and the 'reboot' command to restart your system. In each case they call the 'shutdown' command with different parameters.
(We've covered shutting down your Debian machine previously)
In a single system (non-networked, or no locally shared resources)
environment, the shutdown choice is pretty much yours. However, in a
multi-user production system the rule of thumb is learn the shutdown command.
The two most basic uses of the 'shutdown' command are for halting, or
rebooting. The important parameter to know for shutdown is WHEN is the
action going to occur. Here is the command synopsis from the shutdown
man page:
/sbin/shutdown [-t sec] [-arkhncfFHP] time [warning-message]
The vast majority of your shutdowns will follow one of these two forms:
shutdown -h now
or to reboot instead of halt:
shutdown -r now
Intuitively, the arguments mean 'halt' and 'reboot', respectively.
In a multi-user system like a file server, the most important
parameter is 'time'. The time can be an actual clock time in the form
of HH:MM, or a Julian style shutdown X minutes from now, denoted by the
+X syntax. Note that the '+' is needed. The keyword 'now' is synonymous with '+0'. Here are two examples using the time parameter:
shutdown -h 16:30
shutdown -r +10
Another important point to remember: once the shutdown command is
issued, a notice is sent to all the users of the system and no further
logins are allowed. For example, if you need to bring the system down
at midnight, don't issue the shutdown command at noon and leave to take
a nap. No new users will be able to login for the next 12 hours.
A good admin never takes a system down without warning the user
community, but the shutdown notice is only sent after the command is
executed! Fortunately, there are two ways around the downtime
notification dilemma. The first is the 'motd', Message Of The Day. The
motd is a useful feature that is often overlooked. Using the motd is
easy and you are urged to read the simple man page for details. The
second method of notification is the -k option. Using -k
will send the downtime notice to all the users, but will not actually
start the shutdown sequence. There is an important limitation to the
shutdown notification: the downtime message is only sent 15 minutes (or
less) prior to the actual shutdown.
The warning-message parameter may be useful for...high maintenance
users. I find that the default message is authoritative and simple
enough to accomplish the task.
Troubleshooting in Run Levels
Here is a tip contributed by Nicholas Petreley.
Sometimes you may not want all the programs in a run level to execute.
In this situation an easy way to disable a program is to rename it with
the initial S, or K in lowercase. The system will ignore all programs
that do not begin with a capital S, or K.
|