Я использую rsync для клонирования изменений с удаленного сервера (MT DV4.0) на локальный (ubuntu 11.10). Затем я использую следующий сценарий копирования / вставки для сжатия и архивации файлов.
#!/bin/bash
####################################
#
# Backup to NFS mount script with
# grandfather-father-son rotation.
#
####################################
# What to backup.
backup_files="/home/server-backups/var/www/vhosts /home/server-backups/var/www/vhosts"
# Where to backup to.
dest="/home/bryan/server-tar"
# Setup variables for the archive filename.
day=$(date +%A)
hostname=$(hostname -s)
# Find which week of the month 1-4 it is.
day_num=$(date +%d)
if (( $day_num <= 7 )); then
week_file="$hostname-week1.tgz"
elif (( $day_num > 7 && $day_num <= 14 )); then
week_file="$hostname-week2.tgz"
elif (( $day_num > 14 && $day_num <= 21 )); then
week_file="$hostname-week3.tgz"
elif (( $day_num > 21 && $day_num < 32 )); then
week_file="$hostname-week4.tgz"
fi
# Find if the Month is odd or even.
month_num=$(date +%m)
month=$(expr $month_num % 2)
if [ $month -eq 0 ]; then
month_file="$hostname-month2.tgz"
else
month_file="$hostname-month1.tgz"
fi
# Create archive filename.
if [ $day_num == 1 ]; then
archive_file=$month_file
elif [ $day != "Saturday" ]; then
archive_file="$hostname-$day.tgz"
else
archive_file=$week_file
fi
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date
# Long listing of files in $dest to check file sizes.
ls -lh $dest/
Кажется, что ежедневные резервные копии работают отлично, но я получаю только 6 ежедневных резервных копий. Суббота отсутствует (это должен быть день еженедельного резервного копирования). Также отсутствует ежемесячная резервная копия.
Я любитель-администратор сервера, поэтому любая помощь будет принята с благодарностью. Спасибо!
Кажется, ваш сценарий работает нормально, но уследить за ним сложно; Я удалил несколько мелких ошибок (нельзя использовать == с тестом, это =) и удалил каскадные ifs с помощью более простого решения; теперь он работает с обычным sh.
#!/bin/sh
####################################
#
# Backup to NFS mount script with
# grandfather-father-son rotation.
#
####################################
# What to backup.
backup_files="/home/server-backups/var/www/vhosts /home/server-backups/var/www/vhosts"
# Where to backup to.
dest="/home/bryan/server-tar"
# Setup variables for the archive filename.
day=$(date +%A)
hostname=$(hostname -s)
# Find which week of the month 1-4 it is.
day_num=$(date +%d)
# Integer arithmetic to replace cascading ifs, but now can have 5th week
week_file="$hostname-week$(expr $day_num / 7 + 1).tgz"
# Find if the Month is odd or even.
month_num=$(date +%m)
month_file="$hostname-month$(expr 2 - $month_num % 2).tgz"
# Create archive filename.
if [ $day_num = 1 ]; then
archive_file=$month_file
elif [ $day != Saturday ]; then
archive_file="$hostname-$day.tgz"
else
archive_file=$week_file
fi
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date
# Long listing of files in $dest to check file sizes.
ls -lh $dest/
В чем проблема? Запуская его сегодня (суббота), я обнаружил, что он пытается создать tar-файл с именем /home/bryan/server-tar/pegasus-week2.tgz.
Вы удивлены, что на субботу нет tarfile? Если вы хотите, чтобы он был там, вы можете сделать некоторую ссылку, потому что она будет идентична для $ hostname-week $ {x} .tar
Можете ли вы предоставить файл / home / bryan / server-tar?
[разница изменений на http://www.bayofrum.net/~crees/patches/sf-469087-1.diff]
Извини, я опоздал. Может быть, ваша переменная дня по-другому отображается в терминале?
elif [ $day != Saturday ]; then
к
elif [ $day != saturday ]; then
Это небольшое изменение даты. Вы можете увидеть, как выглядит дата в терминале:
echo day=$(date +%A)