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

相关推荐
GuokLiu33 分钟前
250708-Debian系统安装Edge浏览器并配置最小中文输入法
运维·edge·debian
guygg882 小时前
ubuntu手动编译VTK9.3 Generating qmltypes file 失败
linux·运维·ubuntu
先做个垃圾出来………2 小时前
自动化一次通过率
运维·自动化
夕泠爱吃糖3 小时前
Linux中的静态库和动态库
linux·运维·服务器
比奥利奥还傲.4 小时前
Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战
linux·运维·安全
mmsx5 小时前
使用git生成ssh的ed25519密钥
运维·git·ssh
ZeroNews内网穿透5 小时前
服装零售企业跨区域运营难题破解方案
java·大数据·运维·服务器·数据库·tcp/ip·零售
果子⌂6 小时前
容器技术入门之Docker环境部署
linux·运维·docker
神的孩子都在歌唱6 小时前
常见的网络攻击方式及防御措施
运维·服务器·网络
深度学习04076 小时前
【Linux服务器】-安装ftp与sftp服务
linux·运维·服务器