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.
| Поле | Значение |
|---|---|
| 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.