diff options
| author | Elijah Saxon <elijah@riseup.net> | 2005-01-13 03:22:34 +0000 | 
|---|---|---|
| committer | Elijah Saxon <elijah@riseup.net> | 2005-01-13 03:22:34 +0000 | 
| commit | 3158de11b903c2e7aa5404a5256c874c7593f797 (patch) | |
| tree | f8584ae6e6ca7b8420473bd8ffc0815146409c19 /handlers/maildir | |
| parent | e8615f15d39fcd9fcaedb3145316d07ee90ca2e1 (diff) | |
| download | backupninja-3158de11b903c2e7aa5404a5256c874c7593f797.tar.gz backupninja-3158de11b903c2e7aa5404a5256c874c7593f797.tar.bz2 | |
update
Diffstat (limited to 'handlers/maildir')
| -rw-r--r-- | handlers/maildir | 48 | 
1 files changed, 27 insertions, 21 deletions
| diff --git a/handlers/maildir b/handlers/maildir index 2ea94ff..522bf31 100644 --- a/handlers/maildir +++ b/handlers/maildir @@ -122,30 +122,32 @@ function do_remove() {  function do_rotate() {  	backuproot=$destdir -	now=`date %s` + +	ssh -T -o PasswordAuthentication=no $desthost -l $destuser <<EOF +##### BEGIN REMOTE SCRIPT #####  	seconds_daily=86400  	seconds_weekly=604800  	seconds_monthly=2628000 - -	ssh -o PasswordAuthentication=no $desthost -l $destuser <<EOF  	keepdaily=$keepdaily  	keepweekly=$keepweekly  	keepmonthly=$keepmonthly +	now=\`date +%s\`  	for rottype in daily weekly monthly; do -		seconds=\`echo seconds_\${rottype}\` +		seconds=\$((seconds_\${rottype}))  		dir="$backuproot/\$rottype"  		if [ ! -d \$dir.1 ]; then -			echo "Warning: \$dir.1 does not exist. This backup is missing, so we are skipping the rotation." -			continue +			echo "Info: \$dir.1 does not exist. This backup is missing, so we are skipping the rotation." +			continue 1  		elif [ ! -f \$dir.1/created ]; then -			echo "Warning: \$dir.1/created does not exist. This backup may be only partially completed, so we are skipping the rotation." -			continue +			echo "Warning: \$dir.1/created does not exist. This backup may be only partially completed. Skipping rotation." +			continue 1  		fi  		# Rotate the current list of backups, if we can. -		oldest=\`ls -d $\dir.* | sed 's/^.*\.//' | sort -n | tail -1\` +		oldest=\`ls -d \$dir.* | sed 's/^.*\.//' | sort -n | tail -1\` +		[ "\$oldest" == "" ] && oldest=0  		for (( i=\$oldest; i > 0; i-- )); do  			if [ -d \$dir.\$i ]; then  				if [ -f \$dir.\$i/rotated ]; then @@ -154,38 +156,41 @@ function do_rotate() {  					rotated=0  				fi  				cutoff_time=\$(( now - (seconds*i) )) -				if [ \$rotated -gt \$cutoff_time ]; then +				if [ \$rotated -lt \$cutoff_time ]; then  					next=\$(( i + 1 )) -					echo "mv \$dir.\$i \$dir.\$next" -					mv \$dir.\$i \$dir.\$next -					date +%c%n%s > \$dir.\$next/rotated +					if [ ! -d \$dir.\$next ]; then +						echo "mv \$dir.\$i \$dir.\$next" +						mv \$dir.\$i \$dir.\$next +						date +%c%n%s > \$dir.\$next/rotated +					else +						echo "Info: skipping rotation of \$dir.\$i because \$dir.\$next already exists." +					fi  				else -					echo "Info: skipping rotation of \$dir.\$i because it was already rotated within the last " \$((cutoff_time/86400)) " days." -				fi  +					echo "Info: skipping rotation of \$dir.\$i because it was rotated" \$(( (now-rotated)/86400)) "days ago ("\$(( (now-cutoff_time)/86400))" needed)." +				fi  			fi  		done  	done  	max=\$((keepdaily+1)) -	if [ ( \$keepweekly -a -d $backuproot/daily.\$max ) -a ! -d $backuproot/weekly.1 ]; then +	if [ \( \$keepweekly -gt 0 -a -d $backuproot/daily.\$max \) -a ! -d $backuproot/weekly.1 ]; then  		echo mv $backuproot/daily.\$max $backuproot/weekly.1  		mv $backuproot/daily.\$max $backuproot/weekly.1  		date +%c%n%s > $backuproot/weekly.1/rotated  	fi  	max=\$((keepweekly+1)) -	if [ ( \$keepmonthly -a -d $backuproot/weekly.\$max ) -a ! -d $backuproot/monthly.1 ]; then +	if [ \( \$keepmonthly -gt 0 -a -d $backuproot/weekly.\$max \) -a ! -d $backuproot/monthly.1 ]; then  		echo mv $backuproot/weekly.\$max $backuproot/monthly.1  		mv $backuproot/weekly.\$max $backuproot/monthly.1  		date +%c%n%s > $backuproot/monthly.1/rotated  	fi  	for rottype in daily weekly monthly; do -		max=\`echo keep\${rottype}\` -		max=\$((max+1)) +		max=\$((keep\${rottype}+1))  		dir="$backuproot/\$rottype" -		oldest=\`ls -d $\dir.* | sed 's/^.*\.//' | sort -n | tail -1\` - +		oldest=\`ls -d \$dir.* | sed 's/^.*\.//' | sort -n | tail -1\` +		[ "\$oldest" == "" ] && oldest=0   		# if we've rotated the last backup off the stack, remove it.  		for (( i=\$oldest; i >= \$max; i-- )); do  			if [ -d \$dir.\$i ]; then @@ -194,6 +199,7 @@ function do_rotate() {  			fi  		done  	done +####### END REMOTE SCRIPT #######  EOF  } | 
