Брандмауэры и специальное программное обеспечение 8 Часть 4

Вид материалаРеферат

Содержание


Сценарии rс, часть первая
Подобный материал:
1   ...   25   26   27   28   29   30   31   32   ...   101

Сценарии rс, часть первая


В OpenLinux все сценарии инициализации хранятся в каталоге /etc/rc.d. В нем также имеются подкаталоги rc0.d - rc6.d, где номер соответствует уровню выполнения, а также подкаталог init.d. В каталогах rc#.d (# означает номер уровня исполнения) находятся символические ссылки, указывающие на сценарии из подкаталога /etc/rc.d/init.d (листинг 7.2). Всем сценариям из init.d можно передавать аргументы start и stop, а некоторым — еще два аргумента: reload и restart. Хотя реализация аргументов restart/reload несложна, по крайней мере один демон (dhcp) по сигналу SIGHUP неправильно считывает свой конфигурационный файл. Сигнал SIGHUP (от английского слова hangup — повесить телефонную трубку, дать отбой) означает, что демон должен заново прочитать файл конфигурации и продолжить работу с новой конфигурацией.


СОВЕТ

Сигналы, адресуемые работающим в системе процессам, являются средством передачи команд, предписывающих выполнение этими процессами определенных действий. Чаще всего они применяются для посылки фоновым процессам команды завершения работы. Разрешается использовать сигналы, номера которых лежат в диапазоне от 1 до 31. Команде завершения работы соответствует сигнал SIGTERM (15). Другими часто используемыми сигналами являются SIGKILL (9) и SIGHUP (1). Полный список сигналов можно получить при помощи команды man 7 signal. Посылкой сигналов процессам занимается команда kill, принимающая в качестве параметров имя или номер сигнала и идентификатор процесса, например kill -SIGHUP PID или kill -1 PID. При отсутствии параметра-сигнала посылается сигнал SIGTERM.


Листинг 7.2. Частичный список файлов каталога /etc/rc.d/

drwxr-xr-x 2 root root 1024 Aug 30 07:25 init.d

-rwxr-xr-x 1 root root 5336 Aug 16 22:45 re

-rwxr-xr-x 1 root root 8930 Jul 7 08:55 re.boot

-rwxr-xr-x 1 roo t root 478 Aug 27 08:48 re.local

-rwxr-xr-x 1 root root 2809 Jul 14 16:45 re.modules

-rwxr-xr-x 1 root root 5586 Aug 16 22:45 rc.orig

-rwxr-xr-x 1 root root 10903 Mar 12 1999 re.serial

. drwxr-xr-x 2 root root 1024 Aug 11 23:04 rcO.d

drwxr-xr-x 2 root root 1024 Aug 11 23:04 rcl.d

drwxr-xr-x 2 root root 1024 Aug 11 23:04 rc2.d

drwxr-xr-x 2 root root 1024 Aug 11 23:04 rcS.d

drwxr-xr-x 2 root root 1024 Aug 11 23:04 rc4.d

drwxr-xr-x 2 root root 1024 Aug 30 07:25 rcS.d

drwxr-xr-x 2 root root 1024 Aug 30 07:25 rc6.d

-rwxr-xr-x 1 root root 846 Jun 29 11:02 unconfigured.sh
init.d/

-rwxr-xr-x 1 root root 2144 Jul 14 16:56 bigfs

-rwxr-xr-x 1 root root 864 Jan 28 1999 cron

-rwxr-xr-x 1 root root 1364 Apr 13 13:38 dhcpd

-rwxr-xr-x 1 root root 6920 Jul 14 16:55 functions

-rwxr-xr-x 1 root root 833 Jul 14 22:46 gpm

-rwxr-xr-x 1 root root 1296 Aug 16 22:45 halt

-rwxr-xr-x 1 root root 983 May 11 11:24 httpd

-rwxr-xr-x 1 root root 1243 Jul 14 15:52 inet

-rwxr-xr-x 1 root root 978 Jul 7 05:30 keytable

lrwxrwxrwx 1 root root 11 Aug 5 12:35 local -> ../re.local

-rwxr-xr-x 1 root root 804 Jul 14 23:09 logoutd

-rwxr-xr-x 1 root root 931 Nov 4 1998 Ipd

-rwxr-xr-x 1 root root 1720 Jul 14 22:04 mta

-rwxr-xr-x 1 root root 1294 Jul 27 23:16 named

-rwxr-xr-x 1 root root 2260 Jul 14 16:05 netmount

-rwxr-xr-x 1 root root 2072 Jul 14 16:23 network

-rw-r-xr-x 1 root root 791 Jul 27 23:22 news

-r-xr-xr-x 1 root root 1863 Jun 22 07:57 nfs

-rwxr-xr-x 1 root root 1232 Jan 7 1998 nis-client

-rwxr-xr-x 1 root root 831 Jan 8 1998 nis-server

-rwxr-xr-x 1 root root 1489 Apr 3 00:26 ntp

-r-xr-xr-x 1 root root 3157 Aug 27 10:55 pcmcia

-rwxr-xr-x 1 root root 649 May 26 1998 ppp

lrwxrwxrwx 1 root root 4 Aug 5 12:35 reboot -> halt

-rwxr-xr-x 1 root root 238 Oct 2 1997 rmnologin

-rwxr-xr-x 1 root root 780 Oct 2 1997 rstatd

-rwxr-xr-x 1 root root 1130 Jul 14 22:06 rusersd

-rwxr-xr-x 1 root root 1130 Jul 14 22:05 rwalld

-rwxr-xr-x 1 root root 1130 Jul 14 22:06 rwhod

-rwxr-xr-x 1 root root 1211 Jul 15 03:10 samba

-rwxr-xr-x 1 root root 969 Nov 25 1997 single

-rwxr-xr-x 1 root root 1159 Apr 9 1998 skeleton

-rwxr-xr-x 1 root root 607 Apr 29 04:15 skipped

-rwxr-xr-x 1 root root 1714 Jul 14 20:08 squid

-rwxr-xr-x 1 root root 1147 Mar 25 06:28 syslog

-rwxr-xr-x 1 root root 1060 Mar 16 1999 urandom

-r-xr-xr-x 1 root root 6949 Aug 30 07:25 vmware

-rwxr-xr-x 1 root root 259 Jul 21 09:27 webmin

-rwxr-xr-x 1 root root 990 Aug 10 17:48 xdm

-rwxr-xr-x 1 root root 948 Mar 25 07:53 zap

rc2.d:

lrwxrwxrwx 1 root root 14 Aug 5 12:35 KO5news -> ../init.d/news

lrwxrwxrwx 1 root root 15 Aug 5 12:35 K09samba -> ../init.d/samba

lrwxrwxrwx 1 root root 15 Aug 5 23:51 K12squid -> ../init.d/squid

lrwxrwxrwx 1 root root 13 Aug 5 12:35 K25gpm -> ../init.d/gpm

lrwxrwxrwx 1 root root 15 Aug 5 09:01 K25httpd -> . ./init.d/httpd

lrwxrwxrwx 1 root root 17 Aug 5 12:35 K3Ologoutd -> ../init.d/logoutd

lrwxrwxrwx 1 root root 16 Aug 5 12:35 K39rwalld -> .,/init.d/rwalld

lrwxrwxrwx 1 root root 16 Aug 5 12:35 K40rstatd -> ../init.d/rstatd

lrwxrwxrwx 1 root root 15 Aug 5 12:35 K44dhcpd -> ../init.d/dhcpd

lrwxrwxrwx 1 root root 17 Aug 5 12:35 K47rusersd -> ../init.d/rusersd

lrwxrwxrwx 1 root root 15 Aug 5 12:35 K48rwhod -> ../init.d/rwhod

lrwxrwxrwx 1 root root 13 Aug 5 12:35 K5Omta -> ../init.d/mta

lrwxrwxrwx 1 root root 13 Aug 5 12:35 K60nfs -> ../init.d/nfs

lrwxrwxrwx 1 root root 13 Aug 5 12:35 K70ntp -> ../init.d/ntp

lrwxrwxrwx 1 root root 17 Aug 5 12:35 K73ipxripd -> ../init.d/ipxripd

lrwxrwxrwx 1 root root 20 Aug 5 12:35 K79nis-client -> . ./init.d/nis-client

lrwxrwxrwx 1 root root 20 Aug 5 12:35 K80nis-server -> . ./i nit. d/nis-server

lrwxrwxrwx 1 root root 14 Aug 5 12:35 K85inet -> ../init.d/inet

lrwxrwxrwx I root root 15 Aug 5 21:25 K90named -> . ./init.d/named

lrwxrwxrwx 1 root root 17 Aug 5 12:35 S0lnetwork -> ../Init.d/network

lrwxrwxrwx 1 root root 16 Aug 5 12:35 S0lpcmcia -> . ./imt.d/pcracia

lrwxrwxrwx 1 root root 16 Aug 5 12:35 S05syslog -> ../init.d/syslog

lrwxrwxrwx 1 root root 17 Aug 5 12:35 S05urandom -> ../init.d/urandom

lrwxrwxrwx 1 root root 18 Aug 5 12:35 S20netmount -> ../init.d/netmount

lrwxrwxrwx 1 root root 13 Aug 5 09:02 S26ipx -> ../init.d/ipx

lrwxrwxrwx 1 root root 13 Aug 5 12:35 S351pd -> ../init.d/lpd

lrwxrwxrwx 1 root root 14 Aug 5 12:35 S40cron -> .,/init.d/cron

lrwxrwxrwx 1 root root 13 Aug 5 12:35 S41atd -> ../init.d/atd

lrwxrwxrwx 1 root root 18 Aug 5 12:35 S75keytable •> ../init.d/keytable

lrwxrwxrwx 1 root root 15 Aug 5 12:35 S981ocal -> . ./irrit.d/local

lrwxrwxrwx 1 root root 15 Aug 5 12:35 S99bigfs -> ../init.d/bigfs

lrwxrwxrwx 1 root root 19 Aug 5 12:35 S99rmno1ogin -> ../init.d/rmnologin

lrwxrwxrwx 1 root root 17 Aug 5 12:35 S99skipped -> ../init.d/skipped

lrwxrwxrwx 1 root root 13 Aug 5 12:35 S99zap -> ../init.d/zap

Имена всех файлов из каталогов /etc/re.d/rc#.d начинаются либо с буквы S (от английского слова start — запуск), либо с буквы К (от английского слова kill — уничтожение). Соответственно, сценарии первой категории занимаются запуском демонов, а второй категории — их остановом. Вслед за первым символом идет число, определяющее относительный порядок выполнения сценариев, за которым следует собственно информационная часть имени, которая, как правило, совпадает с именем соответствующего сценария из init.d, на который указывает данная ссылка. Рассмотрим, например, файл S35lpd. Это символическая ссылка, указывающая на файл ../init.d/lpd, используемая сценарием rс для вызова сценария lpd из init.d с аргументом start, в результате чего начинает работу демон печати. Запустить этот сценарий можно из командной строки:

/etc/rc.d/init.d/lpd start

Именно в этом и состоит преимущество инициализации в стиле System V: пользователь root получает возможность запускать, останавливать и, в некоторых случаях, перезапускать и перезагружать произвольные демоны простым вызовом сценария из init.d с соответствующим аргументом. Выполнять это действие может только суперпользователь. Инициализация в стиле BSD не поддерживает подобного единого подхода к управлению различными демонами. Если в вашей системе используется стиль инициализации BSD, чтобы запустить или остановить тот или иной демон, вы должны знать, как именно этот демон управляется из командной строки, а это далеко не всегда ограничивается простым запуском исполняемого файла демона.

Если сценарий /etc/re.d/rc запускается без аргумента, он при помощи команды run level узнает текущий и предыдущий уровни выполнения и на основании этой информации определяет, какие сценарии и как ему следует запустить. Для этого он сравнивает содержимое каталогов, соответствующих предыдущему и текущему уровням выполнения, и, основываясь на различиях между ними, останавливает одни демоны и запускает другие. Говоря более подробно, сценарий rс сначала останавливает все те демоны, которые выполняются на момент его вызова и подлежат останову при переходе с предыдущего уровня выполнения на текущий, после чего стартует все те демоны, которые должны выполняться на текущем уровне, но сейчас не выполняются. Таким образом, сначала выполняются сценарии с префиксом К в порядке от младших номеров к старшим, а затем сценарии с префиксом S тоже от младших номеров к старшим. Благодаря этому запуск и остановка демонов осуществляются в нужном порядке. Например, прежде чем запускать sendmail (mta) или web-сервер Apache (httpd), следует запустить сетевую подсистему. И наоборот, прежде чем останавливать сетевую подсистему, сначала нужно остановить все зависящие от нее службы.

Такое поведение является отличительной чертой комплекта OpenLinux компании Caldera. В комплекте Red Hat и в других комплектах каталоги не сравниваются, вместо этого просто выполняются сценарии останова и запуска из каталога, соответствующего новому уровню выполнения.