由于系统会实时产生文件(如图片),为了保证数据不会因为系统崩溃或者黑客入侵等原因导致数据丢失,如果使用OSS等文件服务可以不用考虑备份的问题,如果是自己弄的文件服务还是对文件进行定时备份也是有必要的。以下是liunx下面的定时备份文件夹的操作。
1.编辑sh命令,对文件夹进行备份,命令如下:
#!/bin/bash backup_date=$(date +%Y%m%d%H%M%S) # 备份目录 backup_dir="/backup/file"
# 判断备份目录是否存在,如果不存在则创建 if [ ! -d "$backup_dir" ]; then mkdir $backup_dir fi # 执行备份操作,将指定文件夹下的文件复制到备份目录 cp -R /home/data $backup_dir/data_$backup_date # 压缩备份文件,并将压缩文件存储到备份目录 tar -czvf $backup_dir/data_$backup_date.tar.gz $backup_dir/data_$backup_date # 删除备份的文件夹 rm -rf $backup_dir/data_$backup_date #删除该文件夹下超过30天的文件 find $backup_dir -mtime +30 -name "*.tar.gz" -exec rm -rf {} \; # 记录备份日志,包括备份日期、备份文件名、备份文件大小等信息 backup_size=$(du -h $backup_dir/data_$backup_date.tar.gz | awk '{print $1}') echo "$backup_date Backup Completed: data_$backup_date.tar.gz ($backup_size)" >> $backup_dir/backup.log
2.创建好备份命令后,需要使用crontab添加定时执行任务,输入crontab -e 将以下命令添加到最后一行 并且保存即可,系统会在2点0分将执行文件备份的命令
0 2 * * * /backup/backup_file.sh >> /backup/log/backup.log 2>&1 # 每天晚上2点执行文件备份命令,并且保存执行日志(包括错误日志)到指定目录/bakcup/log
3. 远程备份到其它服务器,后面会记录如何将文件备份到其它服务器
踩坑记录:
1. 添加了定时执行任务后,发现一直没有执行,当前之前的数据库备份的命令又执行了,后来参考网上说的加个日志输出,才知道是因为权限不足导致命令执行失败,解决方法就是给sh文件加可执行权限,使用 chmod
+
x
/
backup
/
backup_file.sh 加上权限即可。
2. 刚开始使用sh backup_file.sh时一直会报错:无法获取"/home/examxx\r" 的文件状态(stat): 没有那个文件或目录,目录明明在存在的,但是一直报这个错,原因是因为我是在windows环境使用的backup_file.sh文件,然后上传至liunx服务器上面的,windows与liunx的换行符是不一样的,所以liunx识别的目录是包含/r的,解决方法就是在原来linux服务器上面打到一个可以执行的sh文件,然后在这个文件的基础上去编辑,重新保存即可。
在windows上面创建的文件上传到liunx上面执行还有可能会这个错误:语法错误: 未预期的文件结尾,原因和解决方法也和上面的方法一样,