Сценарий содержит список компьютеров, на которых находятся монтировки nfs. Этот список обрабатывается с помощью цикла for. Во время обработки с помощью команды df для каждого хоста запускается утилита grep. Смонтированные каталоги nfs имеют вид:
machine: remote_directory
Данная строка присваивается переменной nfs_machine. Затем эта переменная применяется при выполнении команды unmount. Соответствующий сценарий имеет вид:
$ pg nfsdown
#!/bin/sh
# nfsdown
LIST="methalpha accounts warehouse dwaggs"
for LOOP in $LIST
do
NFS_MACHINE=`df -k | grep $LOOP | awk '{print $1}'`
if [ "$NFS_MACHINE" != "" ]; then
umount $LOOP
fi
done
Рассмотренные в этой главе сценарии в течение длительного времени используются автором книги. Как уже упоминалось, сценарии не должны быть объемными и сложными, поскольку они создаются с целью экономии рабочего времени пользователя.
Сценарии уровня выполнения
Если при загрузке системы вам нужно автоматически запустить приложение, службу или сценарий либо корректно завершить их работу при перезапуске системы, то необходимо создать сценарий уровня выполнения. Почти все варианты системы Linux, а также некоторые системы UNIX в настоящее время имеют каталоги конфигурации уровня выполнения, которые основаны на System V.
Поскольку большая часть систем включает конфигурацию этого типа, именно он и рассматривается далее. Если вы не располагаете каталогами уровня выполнения, не беспокойтесь. Приложения можно запускать в автоматическом режиме; этот метод также обсуждается в данной главе.
В главе рассматриваются следующие темы:
• уровни выполнения;
• способы создания сценариев rc.scripts;
• методы внедрения сценариев rc.scripts на различных уровнях выполнения;
• запуск приложений с помощью файла inittab.
Благодаря созданию сценариев уровня выполнения обеспечивается повышенная степень гибкости при управлении системой. Для запуска или останова приложения на определенном уровне выполнения нужно инсталлировать сценарий уровня выполнения (его еще называют rc.script).
Все сценарии, которые, запускают и прекращают выполнение приложения, и в названии которых имеются ключевые слова "start" или "stop", обычно относятся к сценариям класса rc.script. Обратите внимание на то, что именно пользователь определяет, является ли реализуемый сценарий сценарием типа rc.script. В задачу этого сценария входит успешный запуск и прекращение функционирования какой‑либо службы.
Методика создания каталогов конфигурации уровня выполнения позволяет автоматизировать работу сценариев rc.scripts только при изменении уровня выполнения. Однако нельзя определить, запущены или остановлены все необходимые службы на уровне выполнения. Эта часть работы должна выполняться shell–программистом.
Уровни выполнения можно настраивать в соответствии с действительно выполняемыми службами, но данная тема в книге не рассматривается.
Каталоги, где хранятся сценарии rc.scripts (здесь фактически речь идет о ссылках, которые мы рассмотрим далее), имеют следующий вид:
/etc/rcN.d
или
/etc/rc.d/rcN.d
где N — число. Обычно это число равно семи, поскольку каталоги rcN. d нумеруются от 0 до 6. Однако в системе можно иметь несколько дополнительных каталогов типа rcS.d. Количество каталогов не столь важно; все рассматриваемые каталоги перечислены ниже.
$ pwd
/etc
$ ls -l
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc0.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc1.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc2.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc3.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc4.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc5.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rc6.d |
drwxr‑xr‑x | 2 | root | sys | 1024 | Dec | 22 | 1996 | rcS.d |
В Linux…
$ pwd
/etc/rc.d
$ ls
init.d rc.local rc0.d rc2.d rc4.d rc6.d
rc rc.sysinit rc1.d rc3.d rc5.d
Если команда cd применяется в одном из каталогов rcN.d, можно просмотреть и другие сценарии rc.scripts, связанные с этими каталогами.
$ pwd
/etc/rc.d/rc2.d
$ ls -1
lrwxrwxrwx | 1 | root | root | 16 | Dec 3 | 15:16 | K87ypbind -> ../init.d/yd |
lrwxrwxrwx | 1 | root | root | 17 | Dec 3 | 15:10 | K89portmap -> ../init.d/p |
lrwxrwxrwx | 1 | root | root | 17 | Dec 3 | 15:07 | S01kerneld -> ../init.d/d |