在Linux上定时备份某个文件夹中的数据。
参考: linux定时备份文件夹

思路: 编写一个sh脚本,然后安装 crontab ,修改crontab的任务文件去定时执行该脚本。
注意: 我用的是Debian系统,如果你用的是其他系统,有些命令如果执行失败可以将命令中的 cron 改为 crond 再次尝试执行即可。

编写备份脚本

比如touch ./home/my_script/backup_halo_at_4_oclock_everyday.sh

#! /bin/sh
mkdir -p /home/plantask/Halo/temp # 创建一个临时文件夹
cp -r /root/.halo /home/plantask/Halo/temp # 将要备份的数据复制到临时文件夹中(/root/.halo这个目录就是要备份的目录)
mkdir -p /home/backups/Halo # 创建一个文件夹用于存放压缩打包的备份文件
tar -zcPvf /home/backups/Halo/Halo_$(date +%Y%m%d%H%M%S).tar.gz /home/plantask/Halo/temp # 将临时文件夹中的数据打包。时间格式一定要写成date +%Y%m%d%H%M%S,加号后面一定不要有空格
rm -rf /home/plantask/Halo/temp # 删除临时文件夹中的内容
# find /home/backups/Halo -mtime +30 -name "*.tar.gz" -exec rm -rf {} \; # 删除改文件夹下超过30天的文件
find /home/backups/Halo -mtime +2 -name "*.tar.gz" | xargs rm -f # 删除改文件夹下超过3天的文件,-r是递归删除,-f是强制删除,-rf常用于删除文件夹

写完手动执行一下脚本看能否正常执行(起码要测试成功2次以上才算成功): ./home/my_script/backup_halo_at_4_oclock_everyday.sh

使用 crontab 设置定时任务

  1. 先检查是否安装crontab
    • 方法1: 执行service cron status
      • 出现cron.service - Regular background program processing daemon说明已安装;
      • 出现Unit cron.service could not be found.说明未安装
    • 方法2: 执行service cron
      • 出现[info] Usage: /etc/init.d/cron {start|stop|status|restart|reload|force-reload}.说明已安装;
      • 出现cron: unrecognized service说明未安装
    • 如果出现Unit cron.service could not be found字样,则将cron改为cron再次执行
  2. 没安装就安装: apt install cron
  3. 编写任务计划:
    1. 执行命令crontab -e,然后在最后一行添加0 4 * * * sh /home/fucaijin/my_script/backup_halo_at_4_oclock_everyday.sh即可,该命令每个参数直接翻译过来的意思是在"0分 4时 每号 每月 任意星期 执行sh /home/fucaijin/my_script/backup_halo_at_4_oclock_everyday.sh",就是每天凌晨4点执行/home/fucaijin/my_script/backup_halo_at_4_oclock_everyday.sh这个脚本。(关于crontab的参数及详细用法,请参考Linux定时任务)
    2. 执行Ctrl+O保存,然后会出现类似于File Name to Write: /tmp/crontab.RVTXr7/crontab,回车即可保存。
    3. Ctrl+X退出即可
  4. 完成定时任务的设置。至此就完成了使用 crontab 定时执行脚本backup_halo_at_4_oclock_everyday.sh,脚本对文件夹/root/.halo进行打包备份,并删除旧的备份文件。

Q.E.D.


做一个热爱生活的人