Резервное копирование linux cron
Иногда системным администраторам, программистам, web-дизайнерам и много кому ещё нужно запускать одни и те же команды или скрипт с некоторой периодичностью. Для таких целей используется специальная утилита Cron, встроенная во все дистрибутивы Unix. Пользоваться Cron’ом необычайно легко. Сейчас расскажу как.
Для начала создадим какой-нибудь простой bash-скрипт, например скрип резервного копирования и архивирования конфигурационных файлов, в моём случае конфигурационных файлов Apache2 и ftp-сервера.
#!/bin/bash mkdir /home/user/bash-scripts/backup cp /etc/apache2/apache2.conf /home/user/bash-scripts/backup/apache2.conf-backup cp /etc/apache2/sites-available/site /home/user/bash-scripts/backup/site-backup cp /etc/proftpd/proftpd.conf /home/user/bash-scripts/backup/proftpd.conf-backup tar cvvzf "/home/user/bash-scripts/backup-`date +%F-%X`.tar.gz" /home/user/bash-scripts/backup/ rm -r /home/user/bash-scripts/backup
Этот скрипт копирует конфигурационные файлы и архивирует их в папку, в названии которой присутствует дата и время сохранения. Назовём его ‘backup-script‘ а лежать он у нас будет в домашнем каталоге (/home/user/). Теперь нам надо чтобы этот скрипт запускался, ну допустим, каждые 10 минут. Для этого введём команду
Этой командой мы открываем для редактирования файл crontab для данного пользователя, в моём случае это user. Если нашему скрипту нужны права супер пользователя, то нужно редактировать crontab суперпользователя. Делается это командой
Ну и если заменить root а логин другого пользователя, мы будем редактировать его crontab.
Сразу напишу, чтобы посмотреть файл crontab введите команду.
Файл crontab имеет следующую структуру:
поле1 поле2 поле3 поле4 поле5 команда
Значения первых пяти полей:
1.минуты— число от 0 до 59
2.часы — число от 0 до 23
3.день месяца — число от 1 до 31
4.номер месяца в году — число от 1 до 12
5.день недели — число от 0 до 7 (0-Вс,1-Пн,2-Вт,3-Ср,4-Чт,5-Пт,6-Сб,7-Вс)
Все поля обязательны для заполнения. Не сложно догадаться что первые 5 отвечают за определения периодичности запуска команды, а последняя собственно команда или полный путь к скрипту. Таким образом, чтобы запустить наш скрипт резервного копирования раз в 10 минут надо вписать следующую строчку.
*/10 * * * * /home/user/backup-script
* — значит все возможные варианты, / служит для определения периодичности выполнения задания. Если нужно будет выполнять скрипт раз в 3 часа впишите в значения часы */3 а в минуты просто *, если раз в сутки — впишите */23, ну почти сутки. Так же в одно поле можно вводить несколько значений через запятую, например если хотите выполнять скрипт 1ого, 5ого, и 25ог числа каждого месяца введите 1,5,25 вместо третей звёздочки. Ещё можно вводить промежуток времени, если ,допустим, в часы ввести 12-17 то скрипт будет выполняться с 12 до 17 включительно раз в час.
Ну вот и всё, в заключение пару примеров:
0 */3 * * 2,5 /home/user/backup-script #Каждые три часа только по вторникам и пятницам
15 */3 * * * /home/user/backup-script #Каждые три часа в 15 минут
45 15 * * 1 /home/user/backup-script #По понедельникам в 15:45
13 13 13 * 5 /home/user/backup-script #в пяnницу 13 числа в 13 часов 13 минут
30 00 * * 0 /home/user/backup-script #Раз в неделя по воскресеньем в 00:30
Похожие посты.
Комментарии:
Здравствуйте!
Настраиваю в Ubuntu cron вроде отредактировал файл, а запустить не получается.
На команду subo /sbin/service crond start выдает command not found
Подскажите, пожалуйста, как запустить.
Информация ваша очень мне понравилась.
Доступно написано. Пять балов, из пяти.
А разве sudo /etc/init.d/cron stop/start не работает?
# Создание бэкапа удалённого сервера при помощи Rsync
Эта инструкция — продолжение нашего руководства по установке и настройке Rsync. В этой части мы расскажем, как при помощи Rsync создать бэкап сервера и сохранить его на другой машине и как делать это регулярно — добавим задачу в планировщик задач cron.
Мы будем описывать настройку работы Rsync на сервере с Ubuntu. Для CentOS и Debian процедура настройки будет аналогичной.
# Настройка сервера-клиента
Здесь мы расскажем о том, как настроить сервер, для которого будем создавать бэкап.
Если на машине нет Rsync, тогда установите его. Как это сделать — читайте в нашей инструкции по установке и настройке Rsync.
После установки открываем конфигурационный файл:
При первичной настройке мы только создали файл и оставили его пустым. Сейчас заполним его:
pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log transfer logging = true munge symlinks = yes [data] path = /var/log uid = root read only = yes list = yes comment = Data backup Dir auth users = backup secrets file = /etc/rsyncd.scrt
Здесь мы указываем следующие параметры:
- pid file — указание пути к файлу, в котором будет сохранён идентификатор процесса;
- log file — указание пути к файлу с логами работы программы;
- transfer logging — указание на ведение логов процесса (включает логирование выполнения);
- munge symlinks — указание на модификацию символьных ссылок, которая сохраняет символьные ссылки, но не позволяет их использовать, пока они находятся в бэкапе (одно из усилений безопасности).
Строка [data] — обозначение начала отдельного блока данных, в котором мы описываем параметры сохраняемых в бэкап данных:
- path — путь к папке, содержащей нужные данные;
- uid — пользователь, от имени которого будет производиться резервное копирование;
- read only — указание прав доступа к копируемым ресурсам (только чтение);
- list — указание на вывод списка копируемых файлов (доступ пользователей к списку копируемых файлов);
- comment — комментарий к копируемым данным;
- auth user — имя пользователя для подключения к этому серверу;
- secrets file — путь к файлу, в котором хранится имя пользователя и пароль в формате user:password .
После указания всех необходимых данных сохраняем и закрываем конфигурационный файл.
Теперь создаём файл, содержащий в себе учётные данные пользователя, от имени которого будет производиться резервное копирование:
В открывшийся пустой файл добавляем учётные данные нашего пользователя:
Теперь устанавливаем права на доступ к этому файлу только для root-пользователя:
После этого осталось только перезапустить rsync, и он будет полностью готов к работе:
sudo systemctl restart rsync
Сервер, бэкап которого будем создавать, настроен. Переходим к его настройке.
# Настройка хранилища
Здесь нам нужно написать скрипт, который будет по SSH подключаться к серверу, на котором настроен клиент rsync, и «забирать» определённые данные. Чтобы написать скрипт, воспользуемся любым текстовым редактором:
sudo vim /bin/server_backup.sh
В открывшееся окно добавим следующую информацию:
date syst_dir=/backup/ srv_name=server1 srv_ip=10.10.1.55 srv_user=backup srv_dir=data echo "Start backup $" mkdir -p $syst_dir>$srv_name>/increment/ /usr/bin/rsync -avz --progress --delete --password-file=/etc/rsyncd.scrt $srv_user>@$srv_ip>::$srv_dir> $syst_dir>$srv_name>/current/ --backup --backup-dir=$syst_dir>$srv_name>/increment/`date +%Y-%m-%d`/ /usr/bin/find $syst_dir>$srv_name>/increment/ -maxdepth 1 -type d -mtime +30 -exec rm -rf > \; date echo "Finish backup $"
Здесь мы описали следующие параметры:
- syst_dir — директория, в которой будем сохранять бэкап (заранее убедитесь, что под неё выделено достаточно дискового пространства);
- srv_name — имя сервера, бэкап которого будем создавать;
- srv_ip — адрес сервера, к которому будем подключаться;
- srv_user — имя пользователя rsync, которое мы указали на предыдущем этапе, создавая конфигурационный файл на сервере-клиенте;
- srv_dir — данные, которые будем сохранять — в данном случае указываем data, поскольку именно этот блок описан в конфигурационном файле сервера-клиента.
Это основные директивы, определяющие параметры подключения к серверу-клиенту. Далее идёт описание самого процесса создания резервной копии. В качестве дополнительного параметра, позволяющего следить за объёмом занимаемого дискового пространства, мы добавили в скрипт процедуру, удаляющую резервные копии старше 30 дней.
Сохраняем и закрываем наш скрипт. После этого делаем его исполняемым файлом:
sudo chmod 0744 /bin/server_backup.sh
Теперь нужно создать файл, в котором будет указан пароль для авторизации на сервере-клиенте:
Здесь указываем только пароль для доступа к серверу: password .
После этого передаём права на доступ к этому файлу пользователю root:
sudo chmod 0600 /etc/rsyncd.scrt
Всё готово. Можно проверять работу нашего скрипта, просто запустив его:
sudo sh /bin/server_backup.sh
Если все настройки произведены правильно, то в консоли мы увидим сведения о количестве переданных байт, скорость обмена ими, их список и т.д.:
# Output … zabbix/zabbix_server.log 1,252,925 100% 1.75MB/s 0:00:00 (xfr#6, to-chk=0/69) sent 70,661 bytes received 103,374 bytes 116,023.33 bytes/sec total size is 86,776,026 speedup is 498.61 Tue 05 Apr 2022 02:23:26 PM +05 Finish backup server_name
Скрипт, создающий резервные копии наших данных, готов. Осталось только добавить его к списку задач cron, чтобы резервные копии создавались автоматически.
# Добавление скрипта в Cron
В Linux есть встроенный механизм выполнения заданий по расписанию — планировщик задач Cron. Это универсальный инструмент, позволяющий создавать расписание для выполнения скриптов, что значительно упрощает администрирование и позволяет перевести часть рутинных процессов в фоновый режим.
Перед началом работы с Cron следует ознакомиться с синтаксисом файла, где создаются задачи.
Добавляется задача в одну строку: * * * * * path/to/script . Основные параметры здесь — параметры времени, указанные в строке звёздочками. На месте звёздочек указываются минуты, часы, числа месяца, номер месяца и номер дня недели, в которые нужно запускать данный скрипт.
- 30 * * * * path/to/script — скрипт запускается каждые 30 минут;
- 0 12 15 * * path/to/script — задание выполняется каждый месяц, 15 числа, в 12:00;
- 15 10 * * 2 path/to/script — задание выполняется по вторникам в 10:15.
Теперь добавим наш скрипт в Cron:
Эта команда откроет файл, описывающий синтаксис добавления команд в cron, и сам список выполняемых заданий. Добавляем наш скрипт в этот файл после закомментированных строк:
… # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 30 12 * * * /root/bin/backup-server1.sh
Здесь мы указали следующее задание — выполнять резервное копирование каждый день в 12:30.
© Джино, 2003–2022. «Джино» является зарегистрированным товарным знаком.
Лицензия на телематические услуги связи №150549 от 09.03.2017.