归档老日志的shell脚本

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 归档老日志

本脚本来自有学习阿铭的博文学习:
工作中,需要用到日志切割logrotate,按照各自的需要切割、定义保留日志。

提示:本文中的S全部都$符,不要问为什么,马云爸爸的社区就这样。

#!/bin/bash
#用途:日志切割归档、按天切割
#作者:Caron maktini
#日期:2018年12月15日
#版本:v0.1


logdir=/data/logs/ 
#定义函数如果一个文件存在则删除 
function e_df()
{
    if [  -f $1  ]
    then
      rm -f  $1
}

cd  $logdir

#从7到2,依次遍历循环 
for i in  `seq 7 -1 2`
do
      #$i2比Si小1 
      i2=$[Si-1]
      
      #首先判断1.log.7是否存在,若存在则删除 
      e_df  1.log.$i
    
    #当1.log.6存在,则把1.log.6改名为1.log.7,依次类推
    if [  -f  1.log.$i2  ]
    then
        mv  1.log.$i2 1.log.$i
    fi
done

#由于1.log 后面无后缀,所以不能走上面的for循环,只能另外拿出来处理
e_df 1.log.1
mv  1.log  1.log.1

#每日0点0分执行。

工作中还需要为大文件进行切割,一般工作中是100MB,并进行压缩。

第二脚本

#!/bin/bash
#用途:日志切割归档、并压缩
#作者:Caron maktini
#日期:2018年12月15日
#版本:v0.1

logdir=/data/logs/ 
#技术1.log大小
size=`du -sk $logdir/1.log | awk '{print S1}' 

#如果1.log小于l00MB,则退出脚本 

if [  $size -lt 10240 ] 
then 
    exit 0
fi 

#定义函数,如果一个文件存在,则删除 
function e_df()
{
    if   [  -f  $1 ]
    then 
        rm -f $1 
    fi 
}
 cd  $logdir

#如果1.log.1存在,则先把它压缩为1 log.1.gz,这样下面的for循环才不会错
 
if   [ -f 1.log.1 ] 
then 
    gzip 1.log.1 
fi 

#由于1.log.1已经被压缩为1.log.gz,所以可以直接将1.log改名为1.log.1

mv  1.log  1.log.1

#从7到2,倒序循环 
for i in  `seq 7  -1 2 `
do 
     #$i2比Si小1
    i2=$[Si-1]
    
    #首先判断1 log.7.gz是否存在,若存在删除 
    e_df  1.Iog. $i.gz
 
    #当1.log.6.gz存在,则把1.log.6.gz改名为1.log.7.gz,以此类推
    if [ -f  1.Iog. $i2. gz ]
    then 
         mv 1.Iog. $i2.gz  1.Iog.$i.gz 
    fi 
done 

##说明:由于我们需要按照日志大小切割,所以这个脚本写完后,需要每分钟执行一次,建议添加到公司的监控系统中。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
Shell
Shell脚本有哪些基本语法?
【9月更文挑战第4天】
32 17
|
7天前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
24 12
|
6天前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
23 8
|
7天前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
22天前
|
Ubuntu Linux Shell
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
在Linux中,如何使用shell脚本判断某个服务是否正在运行?
|
21天前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
21 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
22天前
|
监控 Shell Linux
在Linux中,如何使用shell脚本进行系统监控和报告?
在Linux中,如何使用shell脚本进行系统监控和报告?
|
22天前
|
Shell Linux
在Linux中,shell脚本中的条件语句和循环结构是什么?
在Linux中,shell脚本中的条件语句和循环结构是什么?
|
23天前
|
关系型数据库 MySQL Shell
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
MySQL回滚脚本: 误操作delete binlog回滚shell脚本
|
11天前
|
运维 监控 Shell
自动化运维之宝:编写高效的Shell脚本
【8月更文挑战第31天】在运维的世界里,Shell脚本是一把瑞士军刀,它让日常任务变得简单而高效。本文将通过浅显易懂的语言和实际案例,带你领略Shell脚本的魅力,并教你如何打造属于自己的自动化工具箱。无论你是初学者还是资深运维,这篇文章都将为你打开一扇窗,让你看到不一样的风景。让我们一起探索Shell脚本的世界吧!