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