Шрифт:
TTY_LINE=`tty`
case $TTY_LINE in
"/dev/tty0") TERM=ibm3151 ;;
"/dev/tty2") TERM=vt220
#проверка пользователей, которым разрешен доступ к модемной линии
#
echo "This is a modem connection"
# modemf содержит регистрационные имена для допустимых пользователей
modemf=/usr/local/etc/modem.users
if [ -s $modemf ] then
user=`cat $modemf | awk '{print $1}' | grep $LOGNAME`
# если имя не содержится в файле, пользователь не допускается в систему
if [ "$USER" != "$LOGNAME" ]
then
echo "INVALID USER FOR MODEM CONNECTION"
echo " DISCONNECTING………"
sleep 1
exit 1
else
echo "modem connection allowed"
fi
fi
logger -p notice "modem line connect $TTY_LINE… $LOGNAME"
;;
*) TERM=vt220
stty erase '^h' ;;
esac
Команда logger является превосходным инструментальным средством, применяемым для регистрации информации в глобальных файлах сообщений системы.
26.6. Заключение
Благодаря использованию функции перехвата и сигналов реализуется изящное завершение выполнения сценариев. Возможность регистрации сообщений в системном журнальном файле обеспечивает пользователей и администраторов полезной информацией, облегчающей распознавание и устранение любых потенциальных проблем.
ГЛАВА 27
Небольшая коллекция сценариев
В настоящей главе содержатся примеры некоторых наиболее распространенных сценариев. Изучая их, можно заметить, что все они невелики по размеру и довольно просты. В этом и состоит преимущество использования сценариев; они не должны быть сложными и объемными, поскольку сценарии создаются с целью экономии времени пользователя.
Конечно, в состав данной главы неплохо было бы включить сценарий comet, выполняющий общую проверку баз данных. Но поскольку этот сценарий содержит более 500 строк, нецелесообразно включать его в эту небольшую книгу. Разаботка сценария comet началась еще пару лет назад. Тогда этот сценарий состоял не более чем из пяти строк. Но в ходе естественного процесса эволюции величина сценария существенно выросла. Приведем перечень сценариев, рассматриваемых в данной главе:
pingall
Сценарий, использующий записи из файла /etc/hosts для выполнения опроса всех хостов
backup_gen
Общий сценарий резервного копирования, который загружает заданные по умолчанию настройки
del.lines
Оболочка потокового редактора sed, выполняющая удаление строк из файлов
access deny
Утилита, реализующая запрет доступа для определенных пользователей при выполнении регистрации
logroll
Утилита, реализующая прокрутку журнального файла в случае, если он достигает определенного размера
nfsdown
Утилита, реализующая быстрый метод демонтирования всех каталогов nfs
27.1. Сценарий pingall
Еще несколько лет назад сценарий pingall представлял собой часть общего сценария отчета, который выполнялся по ночам. Этот сценарий опрашивает все хосты, записи о которых находятся в файле hosts.
Сценарий реализует просмотр файла /etc/hosts и разыскивает все строки, которые не начинаются с символа #. Затем цикл while считывает строки отфильтрованного текста. Для присваивания переменной addr значения первого поля отфильтрованного текста используется утилита awk. Затем с помощью цикла for по каждому найденному адресу отправляется запрос.
Ниже приводится сам сценарий.
$ pg pingall
#!/bin/sh
# pingall
# просмотр файла /etc/hosts и отправка запроса по каждому адресу
cat /etc/hosts | grep -v '^#' | while read LINE
do
ADDR=`awk '{print $1}'`
for MACHINE in $ADDR
do
ping -s -c1 $MACHINE
done
done
Сценарий pingall можно легко расширить и включить в него функции отчетов, связанные с другими сетевыми утилитами.
27.2. Сценарий backup_gen
Сценарий backup_gen приводится здесь вовсе не для иллюстрации методики резервирования каталогов. Этот сценарий является удачным примером совместного использования настроек, общих для нескольких сценариев.