我有一台安装了plesk的服务器(centOS),我需要为每天规划一些备份。 Plesk只允许一次计划备份,所以我创建了这个解决方案:
这是我的脚本(目前尚未测试):
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
你认为这是一个好的/稳定的解决方案吗?
谢谢!
答案 0 :(得分: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中。
它工作正常,虽然它可以写得更加用户友好; - )
答案 1 :(得分:0)
根据日期轮换备份目标是合理的,但问题中显示的名称生成方法取决于每天运行一次的系统。如果系统关闭一天,或者脚本一天运行两次,则mon.txt
,tue.txt
,...序列将不同步。不使用文件名和笨重的case语句来获取目标目录的名称,而是使用如下代码:
day=$(date +%a)
mv $BACKUPNAME ../${day,,}
如果备份文件属于与当前不同的日期,请使用date
表单,如下所示之一,分别将day
设置为昨天的名称,或者设置为当天的名称上次修改文件时。
day=$(date +%a --date=yesterday)
day=$(date +%a -r $BACKUPNAME)