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

相关推荐
大树884 小时前
液冷系统的真正瓶颈,藏在那层不到1毫米的材料里
大数据·运维·服务器·人工智能·ai
yindeshuiketang5 小时前
企业FDE架构方法论到实战指南从想法到商业变现:需求·设计·技术·测试·运维·交付·变现-小红书&抖音 AI马教授 职场启航宝
运维·人工智能·架构
网硕互联的小客服5 小时前
没有公网IP,如何让外网访问内网服务器?
运维·服务器
布裘5 小时前
【银河麒麟】服务器系统开机黑屏故障排查与修复
linux·运维·服务器·银河麒麟·无法启动
凌风的跨境分享5 小时前
Temu店群运维提效:定时策略自动化任务全场景实操指南
大数据·运维·前端·人工智能·架构·自动化
Zenova EdgeOS5 小时前
Linux iotop:工业边缘 I/O 高级分析实战
linux·运维·服务器
Black蜡笔小新5 小时前
运维提效!视频汇聚平台EasyCVR视频质量诊断,掉线花屏自动预警
运维·安全·音视频
又見山5 小时前
Codex 实战:用 AI 写运维脚本
运维·人工智能
Elastic 中国社区官方博客5 小时前
Elasticsearch 向量数据库:几分钟内完成部署,以经济高效的方式扩展至数千亿规模
大数据·运维·数据库·elasticsearch·搜索引擎·ai·全文检索
赵民勇6 小时前
resolvectl命令详解
linux·运维