Этот сценарий принимает два обязательных аргумента: имя файла со списком файлов для архивирования и резервного копирования, а также адрес электронной почты получателя сжатого и закодированного архива. Список файлов может быть таким же простым, как показано ниже:
$ cat filelist
*.sh
*.html
В листинге 10.8 демонстрируется запуск сценария remotebackup для копирования всех HTML-файлов и файлов сценариев, имеющихся в текущем каталоге, и вывод результатов.
Листинг 10.8.Запуск сценария remotebackup для копирования HTML-файлов и файлов сценариев
$ remotebackup filelist taylor@intuitive.com
Done. remotebackup backed up the following files:
·· *.sh
·· *.html
and mailed them to taylor@intuitive.com
$ cd /web
$ remotebackup backuplist taylor@intuitive.com mirror
Done. remotebackup backed up the following files:
·· ourecopass
and mailed them to taylor@intuitive.com with requested target directory mirror
Усовершенствование сценария
Прежде всего, если у вас установлена современная версия tar, возможно, она поддерживает чтение списка файлов со стандартного ввода stdin (например, GNU-версия tar поддерживает флаг −T, при наличии которого программа читает список файлов со стандартного ввода). В этом случае сценарий можно сократить, убрав команду cat, передающую список файлов через аргументы командной строки.
Файл архива можно распаковывать или просто сохранять, запуская раз в неделю сценарий очистки почтового ящика, предотвращающий его переполнение. Простейший сценарий очистки приводится в листинге 10.9.
Листинг 10.9.Сценарий trimmailbox для использования в комплексе со сценарием remotebackup
#!/bin/bash
# trimmailbox — простой сценарий, гарантирующий сохранность только четырех
#·· последних сообщений в почтовом ящике пользователя. Предполагает
#·· использование реализации Berkeley Mail (Mailx bkb mail) — требует
#·· модификации для других почтовых систем!
keep=4 # По умолчанию сохраняет только четыре последних сообщения.
totalmsgs="$(echo 'x' | mail | sed −n '2p' | awk '{print $2}')"
if [$totalmsgs −lt $keep]; then
··exit 0····# Ничего делать не надо.
fi
topmsg="$(($totalmsgs −$keep))"
mail > /dev/null << EOF
d1-$topmsg
q
EOF
exit 0
Этот короткий сценарий удаляет из почтового ящика все письма, кроме нескольких самых последних ($keep). Очевидно, что, если в роли архивного хранилища используется почтовый ящик Hotmail или Yahoo! Mail, этот сценарий не будет работать и вам придется периодически чистить его вручную.
№ 77. Мониторинг состояния сети
Программа netstat считается одной из самых запутанных утилит администрирования Unix, что очень плохо, потому что в действительности она позволяет получить много полезной информации о пропускной способности и производительности сети. При вызове с флагом −s программа netstat выводит массу информации о каждом сетевом протоколе, поддерживаемом системой, включая TCP, UDP, IPv4/v6, ICMP, IPsec и другие. Большинство из них не поддерживаются в типичной конфигурации. Особый интерес, как правило, вызывает протокол TCP. Этот сценарий анализирует трафик, пересылаемый по протоколу TCP, определяет процент пакетов, потерянных при передаче и выводит предупреждение, если какие-то из значений выходят за рамки допустимого.
Анализ функционирования сети по значениям, накопленным за продолжительный период, определенно полезен, но намного лучше иметь возможность анализировать данные с тенденциями их изменения. Если, к примеру, система регулярно теряет 1,5 % пакетов, а в последние три дня этот показатель подскочил до 7,8 %, похоже, назревает проблема, которую требуется изучить более детально.
Вот почему сценарий состоит из двух частей. Первая часть, представленная в листинге 10.10, — это короткий сценарий, который, как предполагается, должен запускаться каждые 10–30 минут для записи ключевых статистик в файл журнала. Второй сценарий (листинг 10.11) выполняет анализ файла журнала, сообщает о нормальных параметрах функционирования сети и любых аномалиях или других значениях, постоянно увеличивающихся с течением времени.
ВНИМАНИЕ
Некоторые диалекты Unix не могут выполнять этот код в том виде, в каком он приводится здесь (но мы подтверждаем, что он работает в OS X)! Как оказывается, вывод команды netstat в разных версиях Unix и Linux имеет множество мелких различий (где-то изменены пробелы или пунктуация). Нормализация вывода netstat могла бы сама по себе стать прекрасным сценарием.
Читать дальше