Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于备份的BASH脚本的建议_Bash_Backup_Centos_Plesk - Fatal编程技术网

关于备份的BASH脚本的建议

关于备份的BASH脚本的建议,bash,backup,centos,plesk,Bash,Backup,Centos,Plesk,我有一个安装了plesk的servercentOS,我需要为每天计划一些备份。 Plesk只允许一次计划备份,因此我创建了此解决方案: 每晚在文件夹中创建备份 启动一个脚本,该脚本将从每晚通过cronTAB启动的文件夹中的txt文件标题中读取当天的内容 根据当天的名称将备份文件移动到正确的目录中 更改txt标题中的日期名称 这是我目前未测试的脚本: BACKUPNAME="backupname" cd /backup/daily find . -type f | while IFS= read

我有一个安装了plesk的servercentOS,我需要为每天计划一些备份。 Plesk只允许一次计划备份,因此我创建了此解决方案:

每晚在文件夹中创建备份 启动一个脚本,该脚本将从每晚通过cronTAB启动的文件夹中的txt文件标题中读取当天的内容 根据当天的名称将备份文件移动到正确的目录中 更改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
你认为这是一个好的/稳定的解决方案吗


谢谢

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

另一方面,为什么不执行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/backup-$date中,最新备份存储在/COREBACKUP/CurrentBackup中


它工作得很好,尽管它本可以写得更友好一些-

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

day=$(date +%a)
mv $BACKUPNAME ../${day,,}
如果备份文件所属日期与当前日期不同,请使用以下日期表单之一,分别将日期设置为昨天的名称或上次修改文件的日期的名称

day=$(date +%a --date=yesterday)
day=$(date +%a -r $BACKUPNAME)

只有一个计划备份->我只能计划1个备份,我不能计划7个备份,并为每个备份选择保存文件的文件夹。无论如何,这个脚本将备份整个服务器,但我想保存通过Plesk创建的文件,因此总是通过PleskWhy单独的文件夹如此重要?如果不是这样,我建议您只需设置每日备份,并选择仅存储7个最新备份。谢谢您的建议!我将尝试修复代码并重新发布: