定时备份的cron脚本

我正在寻找一个可以做一些备份cron脚本。 即时通讯大多是一个Web开发人员,所以是一种新鲜的bash / cron的东西。

我希望cron将每天一次将“filelist.txt”中的所有文件或目录复制到安装的networking存储驱动器中。 理想情况下,它将在我所有的3个盒子,1个fedora 1 ubuntu和1个sunos上工作(每个文件夹都有diff文件名)

棘手的部分是:我只想保存最近7天的备份,并删除任何比这更早的备份

我相信有些人可以在这方面大大提高,但这可能会让你开始。

您需要的命令可能是扫描并确定要备份的文件列表,然后根据您的喜好selecttar,cpio或zip进行归档。

我会修改你的规格来扫描目录,而不是单个文件。

假设/etc/backupdirlist.txt包含要扫描的目录列表,而/ media / backup是备份媒体(已挂载)的挂载点,而/ media / backup / backups是您想要备份的已经存在的目录并放置文件列表。

如果您使用星期几作为备份过程中的目标文件名并覆盖旧的文件名,则七天的要求不难满足。

你需要这样的事情

(注意:未经testing,可能有错误,如果它做了一些愚蠢的道歉,GNU LGPL许可证和标准免责声明适用)

我build议一次检查这个命令,用echo $ VAR检查这些variables,或者用较less的文件来查看它的function。 另请阅读find和cpio的手册页。

#!/bin/bash DIRLIST=/etc/backupdirlist.txt DAYOFWEEK=`date +%a` FILELISTDEST=/media/backup/backups/$DAYOFWEEK.filelist BACKUPDEST=/media/backup/backups/$DAYOFWEEK.backup.tgz TIMELIMIT=-1 # says save everything modified less than or equal to one day ago echo >$FILELISTDEST # to erase last weeks list for DIR in `cat $DIRLIST` do find $DIR -mtime $TIMELIMIT >>$FILELISTDEST # >> appends the lists done cat $FILELISTDEST | cpio --create --format=ustar | gzip -9 -c >$BACKUPDEST 

我没有解释如何把这个脚本放到cron中,我会把它留给你或另一个参与者。 确保它能够正常工作,并在做到自动化之前先做脚本。

在不同的unix框中,可以有制造商版本的标准实用程序(如find或cpio)的变体。 最好的方法是在所有平台上安装GNU版本。 Linux已经有了GNU版本。

希望这可以帮助!

我build议你考虑rsync--files-from=/path/to/filelist选项。

与此同时,这里对〜drpaulbrewer的剧本有一些改进:

 #!/bin/bash dirlist=/etc/backupdirlist.txt dayofweek=$(date +%a) backupdest=/media/backup/backups/${dayofweek}.backup.tgz while read -r dir do find "$dir" -print0 done < "$dirlist" | cpio --null --create --format=ustar | gzip -9 -c > "$backupdest" 

这消除了临时文件的需要,并能够处理空格的文件名。

我已经将variables名称更改为小写。 即使这些与Bash自己使用的不冲突,我也不希望出于习惯而使用全大写的variables名来避免名称冲突。 如果您愿意,可以使用各种混合格式。 您应该始终引用包含文件或目录名称的variables名称。

我已经消除了时间限制,因为如果没有改变它永远不会被备份,或者如果它被改变然后被备份然后空闲七天,备份被覆盖。

另外,请记住备份的第一条规则:如果未成功testing恢复,则不备份。

在你的crontab中添加一行(使用crontab -e )类似如下:

 0 0 * * * /path/to/backupscript > /dev/null 2>&1 

我发现这个答案有用,但没有足够的声望upvote。 我使用了由Dennis Williamson和user33903( https://serverfault.com/a/110367/149956和https://serverfault.com/a/110356/149956 )发布的其他答案的组合,并提出了下面的脚本在我的一台服务器上使用:

注:我没有包含备份用户组详细信息,并且我的datestring在backupdestfilevariables中是“+%Y-%m-%d”。

 #!/bin/bash filelist=/etc/backup/filelist.txt dirlist=/etc/backup/dirlist.txt backupdestdir=/backup backupdestfile=$backupdestdir/backup-$(date "+%Y-%m-%d").tar.gz tmpfile=$(mktemp) packagedump=/etc/backup/installed-packages.txt servicedump=/etc/backup/service-config.txt backupusergroup=not.telling # generate list of installed packages dpkg-query -W > $packagedump # dump current service configuration sysv-rc-conf --list > $servicedump # generate list of files to backup, kept in $tmpfile echo $tmpfile >> $tmpfile echo $packagedump >> $tmpfile echo $servicedump >> $tmpfile cat $filelist >> $tmpfile cat $dirlist | while read dir do find "$dir" >> $tmpfile done # generate the backup archive cat $tmpfile | cpio --create --format=ustar | gzip -9 -c > $backupdestfile # cleanup rm $tmpfile chown $backupusergroup -R $backupdestdir chmod og-rwx -R $backupdestdir 

在Amazon S3上保存备份非常好。

对于备份,我build议使用重复性和DT-S3-Backup bash脚本。

DT-S3-Backup旨在使用重复和Amazon S3自动化和简化远程备份过程。 脚本configuration完成后,您可以轻松地进行备份,恢复,validation和清理,而无需记住许多不同的命令选项。