在正式的线上环境 我们可能需要对部分文件进行备份,来避免因为某种原因造成的文件丢失或者问题回顾等,所以我这里写一遍关于日志备份的博客供大家参考,希望能帮助到各位小伙伴,如果有错误的地方欢迎指正,谢谢

1. 备份脚本编写

说到备份, 我们第一时间想到的就是把旧的文件复制( cp)一份放到新的路径下,然后再改个名字,ok,收工。

首先我们要先创建备份脚本,打开xshell,输入

touch dumplog.sh

,点击回车键,会在你的当前目录下创建.sh 文件。比如我这里就是 /opt/spring/logs目录下创建的
在这里插入图片描述

然后我们 对文件进行编写

vim dumplog.sh
进入 .sh 文件 , 按a进行编写

下面我们来看.sh脚本该如何编写

#!/bin/bash

#保存备份个数,备份31天数据
number=31
#备份保存路径
backup_dir=/root/logbackup
#日期  针对日志的话 我这里是第二天凌晨0点保存前一天的日志文件
dd=`date -d "yesterday" +%Y-%m-%d`
#源文件日志路径
bean_dir=/opt/spring/logs

#如果文件夹不存在则创建
if [ ! -d $backup_dir ]; 
then     
    mkdir -p $backup_dir; 
fi

#简单写法cp -r /opt/spring/logs/demo.info.$dd.0.log  /root/logbackup/backup_log-$dd.log
# 我的源文件名  demo.info.2021-01-01.0.log   这里根据自己的日志文件名称进行修改
cp -r $bean_dir/demo.info.$dd.0.log  $backup_dir/backup_log-$dd.log

#写创建备份日志
echo "create $backup_dir/backup_log-$dd.log" >> $backup_dir/log.txt

#找出需要删除的备份
delfile=`ls -l -crt  $backup_dir/*.log | awk '{print $9 }' | head -1`

#判断现在的备份数量是否大于$number
count=`ls -l -crt  $backup_dir/*.log | awk '{print $9 }' | wc -l`

if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

编写完成后 , esc + wq 保存并退出。在这里插入图片描述

2. 对脚本进行赋权脚本

chmod 700 /home/dumplog.sh

3. 运行脚本

运行.sh脚本: ./dumplog.sh
发现运行报错:-bash: ./dumplog.sh: /bin/bash^M: bad interpreter: No such file or directory

在这里插入图片描述
然后我去网上查到解决办法:https://blog.csdn.net/youzhouliu/article/details/79051516
我这里用他介绍的方法一解决了问题:

方法一:vim a.sh进入a.sh后, 在底部模式下, 执行:set fileformat=unix后执行:x或者:wq保存修改。
然后就可以执行./a.sh运行脚本了。(我亲自试过, 是ok的)

其实这里的步骤是

1、进入编辑:vim dumplog.sh
2、按 esc 后 输入 :set fileformat=unix + 回车
3、保存并退出: :wq

然后就可以执行了
在这里插入图片描述
4、是否有备份成功。
去你的备份目录(也就是”backup_dir “ 这个变量)下看是否有复制好的备份文件:在这里插入图片描述
并且log.txt 下有备份文件生成的日志:
在这里插入图片描述
5、将Shell脚本添加到计划任务,由crond 执行
首先看一下crond的状态,发现是开着的
在这里插入图片描述
然后编辑/etc/crontab这个文件,将shell脚本添加到配置文件中

vim /etc/crontab
在这里插入图片描述

这个规则也比较简单

          • 用户 脚本

*表示一个小时的第几分钟,可以输入0-59

   *表示一天的第几个小时,可以输入0-23

       *表示一个月的第几天,可以输入1-31

            *表示一年的第几个月,可以输入1-12

                 *表示星期几,可以输入0-6,0或者7表示周日

0 2 * * * 用户 脚本 //表示每天两点执行

0 2 * * 7 用户 脚本 //表示每周日两点执行

0 2 10,20,30 * * 用户 脚本 //表示每周月10号、20号、30号执行

*/1 * * * * 用户 脚本 //每分钟执行一次

0 * * * * 用户 脚本 //表示每天整点执行

然后星期几的那个和与月日感觉不是很搭,还是看自己需要吧

下面试一下,先把备份删了,然后定个时试执行备份脚本
在这里插入图片描述
现在是50,定个52看看
在这里插入图片描述

finally successful
在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐