Программирование HTML Joomla: использование crontab для backup Thu, April 27 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Joomla: использование crontab для backup Печать
Добавил(а) microsin   

В большинстве случаев хостинга на сервере, где расположен сайт, стоит FreeBSD или другая *nix-система. Для автоматического запуска заданий здесь обычно используют crontab.

Сохранение информации вашего сайта - дело безусловно необходимое по многим причинам. Это сбережет результаты Вашей работы от вредного воздействия многих непредвиденных обстоятельств - отказ оборудования сервера, взлом системы хакером, какие-то Ваши неосторожные действия. Было бы неплохо часто изменяющиеся данные (например, база данных MySQL, в которой хранятся данные Вашего сайта на Joomla) архивировать каждый день, а другие данные и файлы, которые меняются нечасто или имеют большой объем, архивировать каждый месяц. В название архива было бы удобно добавлять дату создания архива, тогда эти архивы можно было бы хранить в одной папке. Далее опишу создание такой системы по пунктам (предполагается, что хостинг у вас на *nix системе, например FreeBSD).

1. Для скриптов лучше в домашнем каталоге завести специальную папку, например shscripts, а для хранения архивов бэкапов - другую, например arcbackup. Создадим эти папки.

2. Для скрипта в папке shscripts создадим файл backup.sh, в нем будут производится все необходимые действия. Вот содержимое этого файла:

#!/bin/sh
DB=dbname
DBLOGIN=dbuser
DBPASSW=databasepass
BACKUPDIR=atrcbackup
#Step 1: create database dump
/usr/local/bin/mysqldump --user=$DBLOGIN --password=$DBPASSW --default-character-set=cp1251 $DB > $BACKUPDIR/dump.txt
#Step 2: create archive name with YYMMDD prefix
prefix=`eval date -j +%y%m%d`
suffix=mysite.tar
archive=$BACKUPDIR/$prefix$suffix
#Step 3: create archive
day=`eval date -j +%d`
if [ $day -eq 10 ]; then
   tar -czf $archive --exclude=public_html/datastore/* $BACKUPDIR/dump.txt shscripts/backup.sh .cpanel-datastore/* .gnupg/* etc/* log/* public_html/*
   cp -f $archive arcbackup_last/mysite.tar
else
   tar -czf $archive $BACKUPDIR/dump.txt
fi
#Step 4: remove MySQL dump
rm $BACKUPDIR/dump.txt

Поподробнее опишу, что тут и зачем нужно.
- #!/bin/sh является стандартным началом для скрипта. Тут указывается интерпретатор команд для скрипта.
- dbname задает имя базы данных. Это имя упоминается в файле configuration.php Joomla, переменная $mosConfig_db.
- dbuser задает имя пользователя MySQL, который имеет доступ к базе данных dbname. Упоминается в файле configuration.php Joomla, переменная $mosConfig_user.
- databasepass задает пароль пользователя dbuser MySQL, который имеет доступ к базе данных dbname. Упоминается в файле configuration.php Joomla, переменная $mosConfig_password.
- на шаге 1 делается дамп содержимого базы данных. Внимание! Здесь путь до mysqldump необходимо указывать полностью.
- на шаге 2 подготавливается имя для архива, оно будет в формате YYMMDDmysite.tar (в начало имени добавляется год, месяц, день).
- на шаге 3 создается сам архив. Если число 10-е, то кроме дампа MySQL в архив попадают все папки и файлы из директорий .cpanel-datastore, .gnupg, etc, log, public_html, за исключением содержимого папки public_html/datastore, и этот архив дополнительно копируется в arcbackup_last/mysite.tar. Если число не 10-е, то просто архивируется только дамп MySQL.
- на шаге 4 удаляется временный файл дампа MySQL.

3. Меняем атрибуты у файла shscripts/backup.sh, чтобы он стал исполняемым. Удобнее всего это сделать с помощью Total Commander, подключившись к сайту по ftp (для владельца должна стоять галочка Выполнение):

change attr

Другой способ - использование команды chmod.

4. Создаем задание для кронтаба, которое будет запускать наш скрипт. Вспомним немного теории по кронтабу. Для просмотра заданий используют команду crontab -l:

[username@cp33 ~]$ crontab -l
MAILTO="username"
0 14 * * * shscripts/backup.sh

В этом примере настроено одно задание - каждый день в 14.00 запустить задание - скрипт scripts/backup/backup.sh. Каждая строка, начинающаяся на последовательность типа "0 14 * * * command_or_script" представляет отдельное задание.

Задания редактируются командой crontab -e (после запуска команды открывается окно текстового редактора, обычно это редактор vi):

[username@cp33 ~]$ crontab -e
MAILTO="username"
0 14 * * * shscripts/backup.sh
~
~
   ...
~
/tmp/crontab.chbNTVuHmD: unmodified: line 1

Текстовый редактор vi имеет ужасный для Windows-пользователей интерфейс, но по традициям этот редактор присутствует во всех системах *nix. Пользоваться этим редактором довольно просто, если выучить несколько нехитрых условностей. Я не буду здесь расписывать все подробно, поскольку и сам всего не знаю, ограничусь необходимым минимумом:

- vi имеет два режима - командный и редактирования текста. В командном режиме можно удалять символы, строки, записать файл на диск и выйти из программы, в текстовом режиме можно редактировать текст.
- войти в командный режим можно, нажав на кнопку a (от слова append) или i (insert). Теперь можно набирать текст.
- выйти из текстового режима в командный можно, нажав на кнопку Esc.
- в командном режиме перемещать курсор кнопками со стрелками и удалять отдельные символы командой x, а также удалять отдельные строки командой dd (просто подводим курсор к нужному месту и вводим x или dd).
- в командном режиме можно записать файл на диск, введя :w. При создании задания командой crontab -e нет необходимости указывать при сохранении имя файла - это делается автоматически.
- в командном режиме можно выйти из редактора vi, введя :q. Если ввести :q!, то произойдет безусловный выход, все сделанные и не записанные изменения в тесте не сохранятся.

5. После этих действий у Вас будет настроено автоматическое архивирование сайта. К этой процедуре неплохо также добавить автоматическую перекачку архивов на другой компьютер, тогда уже можно совсем ни о чем не беспокоиться. Вариантов тут много - можно воспользоваться утилитами командной строки scp или sftp, добавив вызов их в скрипт. Для этого нужно на удаленной машине, куда будет производится копирование, установить сервер SSH и настроить ключи. Как это сделать, можно прочитать в статье [1]. Здесь я приведу пример использования простого клиента ftp на машине с Windows XP. Процесс по шагам:

- делаем нехитрый бат-файл ftpdnld.bat с таким содержимым:

ftp -i -s:ftpcmd.txt

- создаем текстовый файл ftpcmd.txt с таким содержимым:

open ftp_your_hosting_site.ru
username
userpass
binary
lcd c:\dir_backup
mget arcbackup/*
mdelete arcbackup/*
quit

Имя ftp_your_hosting_site.ru задает сервер, к которому будем подключаться. Здесь username и userpass - логин и пароль на доступ по ftp к содержимому сайта, обычно они совпадают с логином и паролем *nix шелла. Команда binary переключает режим (по умолчанию он текстовый, и если режим не поменять на бинарный, то скачанные архивы слегка покоцаются). Команда lcd меняет текущую папку на Windows-машине для клиента ftp (туда будут сыпаться скачанные архивы). Команда mget скачивает архивы из указанной ftp-папки в текущую, а команда mdelete удаляет архивы с ftp, освобождая место.

- создаем назначенное задание, которое будет запускать ftpdnld.bat каждый день в нужное время (под Windows это делается совсем просто).

[Ссылки]

1. OpenSSH для Windows.

 

Добавить комментарий


Защитный код
Обновить

Top of Page