Выбрать главу

else

··count=$(find. -newer $timestamp −type f −print | wc −l)

fi

if [$count −eq 0]; then

··echo "$(basename $0): No files found in $localsource to sync with remote."

··exit 0

fi

echo "Making tarball archive file for upload"

tar −czf $tarballname./*

# Готово! Теперь передадим управление сценарию sftpsync.

exec sftpsync $sftpacct $remotedir

Если синхронизация необходима, создается новый файл архива, и все файлы (включая новый архив, конечно же) выгружаются на сервер, как показано в листинге 9.12.

Листинг 9.12. Запуск сценария ssync

$ ssync

Making tarball archive file for upload

Synchronizing: Found 2 files in local folder to upload.

Connecting to intuitive.com…

taylor@intuitive.com’s password:

sftp> cd shellhacks/scripts

sftp> put −P"./AllFiles.tgz"

Uploading./AllFiles.tgz to shellhacks/scripts/AllFiles.tgz

sftp> put −P"./ssync"

Uploading./ssync to shellhacks/scripts/ssync

sftp> quit

Done. All files synchronized up with intuitive.com

Одним из дальнейших усовершенствований мог бы стать вызов ssync из cron каждые несколько часов в рабочие дни, workday, чтобы резервное копирование локальных файлов осуществлялось незаметно и без участия человека.

Глава 10. Администрирование интернет-сервера

Задача управления веб-сервером и службами часто полностью отделена от задачи создания информационного наполнения веб-сайта и управления им. В предыдущей главе предлагались инструменты, в первую очередь предназначенные для веб-разработчиков и других специалистов, отвечающих за информационное наполнение, а в этой главе демонстрируются приемы анализа журналов веб-сервера, зеркалирования веб-сайтов и мониторинга состояния сети.

№ 73. Исследование журнала access_log веб-сервера Apache

Если вы управляете веб-сервером Apache или похожим на него, где используется обобщенный формат журналирования (Common Log Format), вы сможете быстро выполнить статистический анализ с помощью сценария командной оболочки. В стандартной конфигурации веб-сервер ведет для сайта журналы access_log и error_log (обычно в /var/log, но точный путь зависит от системы). Если вы поддерживаете собственный сервер, вам определенно стоит архивировать эту ценную информацию.

В табл. 10.1 перечислены поля в файле access_log.

Таблица 10.1. Значения полей в файле access_log
Поле Значение
1 IP-адрес хоста, обратившегося к серверу
2–3 Защитная информация для соединений HTTPS/SSL
4 Дата и часовой пояс данного запроса
5 Метод вызова
6 Запрошенный URL
7 Использованный протокол
8 Код результата
9 Число переданных байтов
10 Ссылающийся домен
11 Строка идентификации браузера

Типичная строка в access_log имеет следующий вид:

65.55.219.126 — [04/Jul/2016:14:07:23 +0000] "GET /index.rdf HTTP/1.0" 301

310 "-" "msnbot-UDiscovery/2.0b (+http://search.msn.com/msnbot.htm)""

Код результата 301 (поле 8) указывает, что запрос был успешно обработан. Ссылающийся домен (поле 10) определяет URL страницы, которую пользователь просматривал непосредственно перед запросом. Десять лет тому назад в этом поле передавался URL предыдущей страницы; теперь, по соображениям безопасности, в нем обычно указывается "-", как показано в примере.

Количество обращений к сайту можно определить, подсчитав строки в файле журнала, а диапазон дат записей в файле — по первой и последней строкам.

$ wc −l access_log

·· 7836 access_log

$ head -1 access_log; tail -1 access_log

69.195.124.69 — [29/Jun/2016:03:35:37 +0000]…

65.55.219.126 — [04/Jul/2016:14:07:23 +0000]…

Используя эту информацию, сценарий в листинге 10.1 выводит большой объем статистической информации из файла журнала access_log в формате веб-сервера Apache. Предполагается, что сценарии scriptbc и nicenumber, написанные нами в главе 1, находятся в одном из каталогов, перечисленных в переменной окружения PATH.