Скрипты резервного копирования linux

База знаний

Резервное копирование данных должно производиться тогда, когда эти данные не изменяются. В противном случае нельзя гарантировать сохранности этих данных. Желательно регулярно выполнять резервное копирование в часы минимальной нагрузки на систему. Обычно минимальная нагрузка имеетместо в диапазоне от 2 часов ночи до 5 утра (в зависимости от специфики
работы системы).

Достаточно простой и удобный скрипт, позволит Вам создавать резервные копии файлов сайтов и баз данных из командной строки Linux.

#!/bin/bash
tar -czvf /backup/www.$(date +%Y%m%d-%H%M%S).tar.gz /home/bitrix/www
find /backup/www/www* -mtime +10 -exec rm <> \;
mysqldump -u root —opt -R sitemanager > /backup/sitemanager-$(date +%Y%m%d-%H%M%S).sql
find /backup/sitemanager0* -mtime +10 -exec rm <> \;
exit 0

Вторая строка скрипта использует в качестве параметра путь к директории сайта, в данном примере /home/bitrix/www, после чего создает архивный файл, имя которого будет содержать текущую дату. Например, для архивирования другой директории, Вам необходимо будет изменить ее в скрипте. Также обратите внимание, что директория /backup должна существовать на сервере.

Третья и пятая строка скрипта отвечает за ротацию резервных копий, в данном примере копии старше 10 дней будут удаляться при запуске скрипта.

Четвертая строка скрипта создает дамп базы данных.

Ставим ежедневное выполнение скрипта на cron:

00 2 * * * bash /home/backup.sh > /dev/null 2>&1

Источник

Скрипты резервного копирования linux

Иногда системным администраторам, программистам, 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 минут. Для этого введём команду

Читайте также:  Установка atop astra linux

Этой командой мы открываем для редактирования файл 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
Подскажите, пожалуйста, как запустить.

Читайте также:  Automate tasks in linux

Информация ваша очень мне понравилась.
Доступно написано. Пять балов, из пяти.

А разве sudo /etc/init.d/cron stop/start не работает?

Источник

Пример скрипта для создания резервной копии файлового сервера

Обновлено

Обновлено: 19.06.2023 Опубликовано: 24.05.2022

  • Ежедневная актуализация данных в каталоге резервный копий daily.
  • Еженедельная актуализация данных в каталоге резервный копий weekly.
  • Создание полного архива с данными раз в 30 дней.
  • Старые архивы (которым более 370 дней) будут удаляться.

Пример скрипта

Скрипт будет сравнивать файлы в рабочем каталоге и папке резервного копирования с помощью rsync. Это позволит нам сэкономить на времени выполнения задания. Долго будет выполняться только задание создания архива с помощью tar.

Создаем каталог для скриптов и сам скрипт:

  1. #!/bin/bash
  2. PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
  3. source=»/data»
  4. destination_root=»/backup»
  5. fdate=$(date +%Y-%m-%d)
  6. # Clean old archives
  7. find $/archive -type f -name «*.tar.gz» -ctime +370 -exec rm -R <> \; 2>&1
  8. # Daily
  9. rsync -a —partial —inplace —append —delete-after $/ $/daily/
  10. # Weekly
  11. if [[ $(date +%u) -eq 0 ]]
  12. then
  13. rsync -a —partial —inplace —append —delete-after $/ $/weekly/
  14. fi
  15. # Archive
  16. count_last_archives=$(find $/archive/ -name «*.tar.gz» -mtime -30 | wc -l)
  17. if [[ $count_last_archives -eq 0 ]]
  18. then
  19. cd $
  20. tar zcf $/archive/samba_$.tar.gz ./*
  21. fi

Задаем права скрипту на выполнение:

chmod +x /scripts/samba_backup.sh

Описание скрипта

Опишем значимые строки нашего скрипта:

1 Указываем на путь к интерпретатору.
2 Задаем системные переменные, чтобы не пришлось в скрипте прописывать полные пути до исполняемых файлов.
4 — 6 Задаем переменные.
4 Каталог и рабочими данными, которые нужно резервировать.
5 Корневая папка, где нужно хранить резервные копии.
6 Дата, когда запускается скрипт. Используется для
9 Поиск и удаление всех архивов, которым более 370 дней.
11 — 18 Синхронизация данных с помощью rsync
12 Выполнение синхронизации данных в каталог daily.
15 Задаем условие. Номер дня недели должен равняться 0 (воскресенье). Если это так, то будет выполнена строка 17.
17 Выполнение синхронизации данных в каталог weekly.
20 — 26 Создание архива.
21 Получим количество файлов с архивами, которым меньше 30 дней и сохраним результат в переменную count_last_archives.
22 Проверяем условие, равна ли переменная count_last_archives нулю. На практике это значит, что за последние 30 дней у нас нет ни одного архива. Если это так, то выполняем строки 24 — 25.
24 Переходим внутрь каталога с рабочими данными. Это нужно для того, чтобы наш архив создавался относительно не корня, а рабочего каталога. Так удобнее при восстановлении данных.
25 С помощью утилиты tar мы архивируем все данные и создаем архив в каталоге archive. В название архива добавляем дату его создания.
Читайте также:  Arch linux update grub

Подготовка системы

Создаем каталоги, в которых будут храниться резервные копии:

В нашем примере, это три каталога, относительно, папки /backup:

  1. daily — ежедневные копии. Для быстрого восстановления.
  2. weekly — еженедельные. На случай, если ежедневный бэкап успел стереть важные данные.
  3. archive — архивы на крайний случай.

Наша система готова к созданию резервных копий.

Сохранение данных на удаленном компьютере

Резервные копии необходимо создавать на удаленном компьютере или внешнем диске, чтобы они были доступны при выходе из строя сервера. Предположим, у нас используется общая папка на удаленном сервере, в которой будут размещаться файлы с backup.

Чтобы упростить процесс монтирования сетевой папки, откроем на редактирование следующий файл:

//192.168.0.1/backup /mnt cifs user,rw,noauto,credentials=/root/.smbclient 0 0

* в данном примере выполняется монтирование общей папки backup на сервере с IP-адресом 192.168.0.1 в каталог /mnt. В качестве сетевой файловой системы используется cifs (протокол SMB: сервер samba или общая папка Windows). Параметры для подключения — user: позволяет выполнить монтирование любому пользователю, rw: с правом на чтение и запись, noauto: не монтировать автоматически при старте системы, credentials: файл, в котором написаны логин и пароль для подключения к общей папке.

Теперь создадим файл с логином и паролем:

и приведем его к следующему виду:

* где username: имя пользователя, password: пароль. Само собой, в вашем случае указываются свои данные.

Устанавливаем пакет cifs-utils, позволяющий в Linux монтировать smb-шары. В зависимости от типа Linux, команды будут немного различаться.

а) Deb (Ubuntu / Debian, Astra Linux):

б) RPM (Rocky Linux / РЕД ОС / CentOS):

Теперь введите следующую команду:

Должна примонтировать сетевая папка //192.168.0.1/backup. Это можно проверить следующей командой:

Подробнее про монтирование сетевых папок читайте в инструкции Как в Linux монтировать шару CIFS.

Автоматический запуск по расписанию

Создадим правило в cron для автоматического запуска нашего скрипта. Выполняем команду:

0 3 * * * /scripts/samba_backup.sh

* в данном примере мы будем запускать резервирование каждый день в 3 часа ночи.

Источник

Оцените статью
Adblock
detector