crontab定时任务收集日志

业务背景

系统有一个业务并发量是每秒并发量上万,部了20多台机器,分摊下来每台机器每秒几百并发请求,每小时日志可能都有1G+。由于日志过大,运维只保留了1天的日志,但是审计需要保留60天的日志,所以我们需要抽取一部分日志收集保存,比如每分钟抽取20条日志,保留60天。定的方案有两种,要么用linux定时任务通过shell脚本收集,要么用java工程写代码收集,我觉得直接在linux上操作会简单很多,就尝试写shell脚本收集日志。

编写shell脚本

写简单的shell脚本还是不难的,下面的代码展示:

shell 复制代码
#!/bin/bash
#判断当前时间如果是0点就打包
currentTime=$(date "+%H%M%S")
if [ $currentTime -eq 000000 ]
then
tar -zcvfP /opt/xxx/log/xxx/xxx.`date -d "-1 day" "+%Y%m%d"`.log.tar /opt/xxx/log/collectxxx/collectxxx.log-`date -d "-1 day" "+%Y%m%d"`
rm -rf /opt/xxx/log/collectxxx/collectxxx.log-`date -d "-1 day" "+%Y%m%d"`
fi

#步数,输入参数
step=$1
for (( i = 0; i < 60; i=(i+$step) )); do
if [ ! -d /opt/xxx/log/collectxxx ];
then mkdir /opt/xxx/log/collectxxx
fi
#if [ -f /opt/xxx/log/collectxxx/collectxxx.log-`date "+%Y%m%d"` ];
#then touch /opt/xxx/log/collectxxx/collectxxx.log-`date "+%Y%m%d"`
#fi
tail -$2 /opt/xxx/log/xxx/xxx.log   >> /opt/xxx/log/collectxxx/collectxxx.log-`date "+%Y%m%d"`

sleep $step
#for循环结束
done
exit 0

首先是用#!/bin/bash做开头,然后用了for循环,因为crontab定时任务只支持分钟级,需要通过代码循环实现秒级逻辑。 在linux中 ">"会覆盖原文件内容,">>"是追加到文件末尾,一开始以为">>"要文件存在才能输出到文件,所以添加了if语句判断文件是否存在,后面查了一下发现如果文件不存在会直接创建,但是目录是要存在的。 $1是shell脚本传入第一个参数,可以收集末尾前n行。 注意"[ ]" 前后需要空格,否则会报错...

测试一下shell脚本 直接./xxx.sh启动,报没有权限,通过chmod 777 xxx.sh设置读写权限。执行完测试通过就可以设置linux定时任务了

shell 复制代码
crontab -e
* * * * * /bin/bash /opt/xxx/log/collectxxx.sh 10 3

后面发现突然发现日志不是10秒打一次,而是日志变动就会打十几条,开始不知道是什么问题,感觉奇奇怪怪的,后面通过ps -ef|grep xxx.sh命令,发现原来是之前tail -f定时任务不会关闭,一直在监听着日志变动,十几个定时任务都在跑着...后面我一一kill掉问题解决。

总结

如果是运维的话要熟练掌握shell脚本,比如说定时清理日志,定时收集日志,还有之前在网上找的升级SSH的shell脚本,最近也写了一个部署服务的shell脚本等等。目前用deepseek写个shell脚本还是挺方便的

相关推荐
七夜zippoe17 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64819 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满19 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠19 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90319 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技20 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀21 小时前
Linux环境变量
linux·运维·服务器
zzzsde21 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º1 天前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~1 天前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化