我有一台安装了 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
您认为这是一个好的/稳定的解决方案吗?
谢谢!
最佳答案
我不知道你所说的“只有一个计划的备份”是什么意思,你能解释一下吗?
另一方面,如果需要,为什么不做一个 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 中。
它工作得很好,虽然它可以写得更用户友好;-)
关于bash - 关于备份的 BASH 脚本的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12728429/