········1 script '/var/www/vhosts/default/htdocs/wp-trackback.php' not found
or unable to stat
········1 script '/var/www/vhosts/default/htdocs/sprawdza.php' not found or
unable to stat
········1 script '/var/www/vhosts/default/htdocs/phpmyadmintting.php' not
found or unable to stat
And non-error messages occurring in the log file:
········6 /usr/lib64/python2.6/site-packages/mod_python/importer.py:32:
DeprecationWarning: the md5 module is deprecated; use hashlib instead
········6 import md5
········3 [Sun Jun 25 03:35:34 2017] [warn] RSA server certificate CommonName
(CN) `Parallels Panel’ does NOT match server name!?
········1 sh: /usr/local/bin/zip: No such file or directory
········1 sh: /usr/local/bin/unzip: No such file or directory
№ 76. Предотвращение катастрофических последствий с использованием удаленного архива
Независимо от наличия всеобъемлющей стратегии резервного копирования, никогда нелишне подстраховаться и организовать резервное копирование критически важных файлов в отдельный архив, хранящийся в отдельной системе, за пределами сайта. Даже если это всего один файл с адресами ваших клиентов, вашими ведомостями или даже электронными письмами от возлюбленной, внешний архив может спасти вас, когда вы меньше всего это ожидаете.
Решение задачи выглядит сложнее, чем есть на самом деле, потому что, как показано в листинге 10.7, «архив» — это всего лишь файл, посылаемый по электронной почте в удаленный почтовый ящик, который может находиться на серверах Yahoo! или Gmail. Список архивируемых файлов хранится в отдельном файле данных и допускает использование шаблонных символов, поддерживаемых командной оболочкой. Имена файлов могут содержать пробелы, что никак не усложняет сценарий, как вы увидите сами.
Листинг 10.7.Сценарий remotebackup
··#!/bin/bash
··# remotebackup — принимает список файлов и каталогов, создает единый
··#·· сжатый архив и отправляет его по электронной почте на удаленный сайт
··#·· для сохранения. Может запускаться по ночам для сохранения важных
··#·· пользовательских файлов, но не может служить заменой более строгой
··#·· системы резервного копирования.
··outfile="/tmp/rb.$$.tgz"
··outfname="backup.$(date +%y%m%d). tgz"
··infile="/tmp/rb.$$.in"
··trap "$(which rm) −f $outfile $infile" 0
··if [$# −ne 2 −a $# −ne 3]; then
····echo "Usage: $(basename $0) backup-file-list remoteaddr {targetdir}" >&2
····exit 1
··fi
··if [! -s "$1"]; then
····echo "Error: backup list $1 is empty or missing" >&2
····exit 1
··fi
··# Сканировать записи и создать фиксированный список в файле infile.
··#·· В ходе этой операции выполняются экранирование пробелов и подстановка
··#·· шаблонных символов в именах файлов, то есть имя файла "this file"
··#·· превращается в this\ file, что избавляет от необходимости использовать
··#·· кавычки.
··while read entry; do
····echo "$entry" | sed −e 's/ /\\ /g' >> $infile
··done < "$1"
··# Фактическое создание архива, его кодирование и отправка.
··tar czf −$(cat $infile) | \
····uuencode $outfname | \
····mail −s "${3:-Backup archive for $(date)}" "$2"
··echo "Done. $(basename $0) backed up the following files: "
··sed 's/^/ /' $infile
··/bin/echo −n "and mailed them to $2 "
··if [! -z "$3"]; then
····echo "with requested target directory $3"
··else
····echo ""
··fi
··exit 0
Убедившись с помощью простых проверок в том, что продолжение работы возможно, сценарий обрабатывает список важных файлов, передаваемый в первом аргументе командной строки, в цикле while
, экранируя пробелы в именах файлов. Экранирование заключается в добавлении символа обратного слеша перед каждым пробелом. Затем командой tar
создается архив. Она не может читать список файлов со стандартного ввода, поэтому список передается в виде аргументов, с помощью команды cat.
Архиватор tar автоматически сжимает архив, а следующая за ним команда uuencode гарантирует возможность отправки полученного архива по электронной почте без повреждений. Конечный результат заключается в получении электронного письма с закодированным tar-архивом в удаленной системе.
ПРИМЕЧАНИЕ
Программа uuencode кодирует двоичные данные так, что они могут передаваться без повреждений через систему электронной почты. Дополнительную информацию смотрите в странице справочного руководства man uuencode.
Читать дальше