Назад | Перейти на главную страницу

cron скрипт для запланированного резервного копирования

Я ищу cron-скрипт, который может делать некоторые резервные копии. Я в основном веб-разработчик, поэтому я новичок в bash / cron.

Я хочу, чтобы cron копировал все файлы или каталоги из «filelist.txt» на смонтированный сетевой накопитель один раз в день. в идеале он будет работать на всех 3 моих ящиках, 1 Fedora 1 ubuntu и 1 sunos (только с именами файлов различий в каждом)

сложная часть: я хочу сохранять резервные копии только за последние 7 дней и удалять любые более старые

Я бы порекомендовал вам рассмотреть rsync с этими --files-from=/path/to/filelist вариант.

А пока вот некоторые улучшения ~ Drpaulbrewer's сценарий:

#!/bin/bash
dirlist=/etc/backupdirlist.txt
dayofweek=$(date +%a)
backupdest=/media/backup/backups/${dayofweek}.backup.tgz
while read -r dir 
do
    find "$dir" -print0
done < "$dirlist" |
    cpio --null --create --format=ustar | gzip -9 -c > "$backupdest"

Это устраняет необходимость во временном файле и позволяет обрабатывать имена файлов с пробелами.

Я изменил имена переменных на строчные. Несмотря на то, что они не конфликтуют с теми, которые использует сам Bash, я предпочитаю не использовать имена переменных с заглавными буквами по привычке, чтобы избежать конфликтов имен. При желании вы можете использовать любой из различных форматов со смешанным регистром. Вы всегда должны заключать в кавычки имена переменных, которые содержат имена файлов или каталогов.

Я устранил ограничение по времени, так как, если что-то не изменилось, оно вообще никогда не было скопировано, или если оно было изменено, затем скопировано, а затем простаивает в течение семи дней, резервная копия перезаписывается.

Также помните первое правило резервного копирования: оно не копируется, если вы не проверили восстановление.

Добавьте строку в ваш crontab (используя crontab -e) аналогично этому:

0  0  *  *  *  /path/to/backupscript > /dev/null 2>&1

Я уверен, что некоторые люди могут значительно улучшить это, но это может помочь вам начать.

Возможно, вам понадобятся команды для сканирования и определения списка файлов для резервного копирования, а затем tar, cpio или zip для архивирования в зависимости от ваших предпочтений.

Я немного изменю вашу спецификацию, чтобы сканировать каталоги, но не отдельные файлы.

Предположим, /etc/backupdirlist.txt содержит список каталогов для сканирования, а / media / backup - это точка монтирования резервного носителя (уже смонтированного), а / media / backup / backups - это уже существующий каталог, в который вы хотите делать резервные копии. и размещены списки файлов.

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

Вам нужно что-то вроде этого

(примечание: непроверено, могут быть ошибки, извинения, если он делает что-то глупое, применяется лицензия GNU LGPL и стандартный отказ от ответственности)

Я предлагаю перебирать эту команду за раз и проверять переменные с помощью echo $ VAR или файлы с помощью less, чтобы увидеть, что она делает. Также прочтите справочные страницы для find и cpio.

#!/bin/bash
DIRLIST=/etc/backupdirlist.txt
DAYOFWEEK=`date +%a`
FILELISTDEST=/media/backup/backups/$DAYOFWEEK.filelist
BACKUPDEST=/media/backup/backups/$DAYOFWEEK.backup.tgz
TIMELIMIT=-1  # says save everything modified less than or equal to one day ago
echo >$FILELISTDEST   # to erase last weeks list
for DIR in `cat $DIRLIST` 
 do find $DIR -mtime $TIMELIMIT >>$FILELISTDEST  # >> appends the lists
done
cat $FILELISTDEST | cpio --create --format=ustar | gzip -9 -c >$BACKUPDEST

Я не объяснил, как поместить этот скрипт в cron, оставлю это вам или другому участнику. Прежде чем автоматизировать, убедитесь, что он работает и выполняет то, что вы хотите в качестве сценария.

В разных модулях unix могут быть разные версии стандартных утилит производителя, таких как find или cpio. Лучший способ обойти это - установить версии GNU на всех платформах. В Linux уже есть версии GNU.

Надеюсь это поможет!

Я нашел этот ответ полезным, но у меня недостаточно репутации, чтобы проголосовать за него. Я использовал комбинацию других ответов, опубликованных Деннисом Уильямсоном и пользователем 33903 (https://serverfault.com/a/110367/149956 и https://serverfault.com/a/110356/149956) и придумал сценарий ниже для использования на одном из моих серверов:

Примечание. Я не включил данные резервной группы пользователей, и моя строка даты в переменной backupdestfile - «+% Y-% m-% d».

#!/bin/bash
filelist=/etc/backup/filelist.txt
dirlist=/etc/backup/dirlist.txt
backupdestdir=/backup
backupdestfile=$backupdestdir/backup-$(date "+%Y-%m-%d").tar.gz
tmpfile=$(mktemp)
packagedump=/etc/backup/installed-packages.txt
servicedump=/etc/backup/service-config.txt
backupusergroup=not.telling

# generate list of installed packages
dpkg-query -W > $packagedump

# dump current service configuration
sysv-rc-conf --list > $servicedump

# generate list of files to backup, kept in $tmpfile
echo $tmpfile >> $tmpfile
echo $packagedump >> $tmpfile
echo $servicedump >> $tmpfile
cat $filelist >> $tmpfile
cat $dirlist | while read dir
do
    find "$dir" >> $tmpfile
done

# generate the backup archive
cat $tmpfile | cpio --create --format=ustar | gzip -9 -c > $backupdestfile

# cleanup
rm $tmpfile
chown $backupusergroup -R $backupdestdir
chmod og-rwx -R $backupdestdir

На Amazon S3 очень хорошо сохранять резервные копии.

Для резервных копий рекомендую использовать дублирование и DT-S3-Резервное копирование bash скрипт.

DT-S3-Backup был разработан для автоматизации и упрощения процесса удаленного резервного копирования с использованием дублирования и Amazon S3. После настройки сценария вы можете легко создавать резервные копии, восстанавливать, проверять и очищать, не запоминая множество различных параметров команд.