1

我有一台安装了 plesk 的服务器(centOS),我需要为每天计划一些备份。Plesk 只允许一个计划备份,所以我创建了这个解决方案:

  1. 每天晚上在文件夹中创建一个备份
  2. 启动一个脚本,该脚本将从文件夹内的 txt 文件的标题中读取日期(每晚通过 cronTAB 启动)
  3. 将备份文件移动到正确的目录中(基于当天的名称)
  4. 更改txt标题中的日期名称

这是我的脚本(目前未测试):

BACKUPNAME="backupname"
cd /backup/daily
find . -type f | while IFS= read filename; do
  case "${filename,,*}" in 
    mon.txt) mv $BACKUPNAME ../mon
    mv mon.txt tue.txt;;
    tue.txt) mv $BACKUPNAME ../tue
    mv tue.txt wed.txt;;
    wed.txt) mv $BACKUPNAME ../wed
    mv wed.txt thu.txt;;
    thu.txt) mv $BACKUPNAME ../thu
    mv thu.txt fri.txt;;
    fri.txt) mv $BACKUPNAME ../fri
    mv fri.txt sat.txt;;
    sat.txt) mv $BACKUPNAME ../sat
    mv sat.txt sun.txt;;
    sun.txt) mv $BACKUPNAME ../sun
    mv sun.txt mon.txt;;
    * : ;; #nothing
  esac
done

您认为这是一个好的/稳定的解决方案吗?

谢谢!

4

2 回答 2

0

根据日期轮换备份目标是合理的,但问题中显示的名称生成方法取决于每天运行一次的系统。如果系统关闭一天,或者脚本一天运行两次,您的mon.txt, tue.txt, ... 序列将不同步。不要使用文件名和笨拙的 case 语句来获取目标目录的名称,而是使用如下代码:

day=$(date +%a)
mv $BACKUPNAME ../${day,,}

如果备份文件属于与当前不同的日期,请使用date如下形式之一,分别设置day为昨天的名称,或文件最后修改日期的名称。

day=$(date +%a --date=yesterday)
day=$(date +%a -r $BACKUPNAME)
于 2012-10-04T14:33:45.510 回答
0

我不知道你所说的“只有一个计划的备份”是什么意思,你能解释一下吗?

另一方面,如果需要,为什么不做一个 rsync 并删除最旧的......这就是我这样做的方式:

#!/bin/bash
date=`/bin/date "+%Y-%m-%dT%H_%M_%S"`
HOME=/root

/bin/echo -e "\n\n# Backup from $date\n" >> /var/log/backup.log

/usr/bin/rsync -axzP \
  --delete \
  --delete-excluded \
  --exclude-from=$HOME/.rsync/exclude \
  --link-dest=/COREBACKUP/CurrentBackup \
  / /COREBACKUP/Backups/incomplete_back-$date >> /var/log/backup.log 2>&1 \
&& mv /COREBACKUP/Backups/incomplete_back-$date /COREBACKUP/Backups/back-$date \
&& rm -f /COREBACKUP/CurrentBackup \
&& ln -s /COREBACKUP/Backups/back-$date /COREBACKUP/CurrentBackup \
&& echo `/bin/date "+%Y-%m-%d - %H:%M:%S"` > /var/log/lastbackup.log 2>&1

该脚本每天通过 cron 调用,它会完整备份“/”,不包括 $HOME/.rsync/exclude 中列出的所有内容。

备份存储在/COREBACKUP/Backups/back-$date,最新备份存储在/COREBACKUP/CurrentBackup。

它工作得很好,虽然它可以写得更用户友好;-)

于 2012-10-04T13:41:49.410 回答