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脚本还是挺方便的

相关推荐
Alluxio4 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
Sayai8 小时前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher
Elastic 中国社区官方博客9 小时前
更少的位数,相同的召回率:DiskBBQ 更保守的自动校准扫描
大数据·运维·开发语言·人工智能·elasticsearch·搜索引擎
方便面不加香菜9 小时前
Docker Volume -- 管理卷Volume详解
运维·docker·容器
沫璃染墨9 小时前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp
Felven9 小时前
华为鲲鹏920s芯片serdestool工具使用说明
linux·运维·服务器·华为·鲲鹏920·serdestool
江湖有缘10 小时前
Docker实战 | 使用Docker部署lemonitor镜像站点列表程序
运维·docker·容器
莫晓燚10 小时前
mall 电商项目完整部署---实战
linux·运维·docker·容器
爱和冰阔落10 小时前
【Linux网络】JsonCpp 怎么实现序列化?从 Request/Response 到网络计算器消息设计
linux·运维·网络·php
Decay__10 小时前
01_SQLServer 体系架构全解 —— 实例进程、关系引擎、SQLOS 与事务日志深入
运维·数据库·sql·mysql·架构