如何编写Shell脚本实现数值比较与邮件告警?
Shell脚本实现锁表条目阈值告警
基础版脚本(读取fig.txt判断告警)
#!/bin/bash # 读取fig.txt中的锁表使用条目数 LOCK_COUNT=$(cat fig.txt) # 按阈值判断并发送邮件告警 if [ "$LOCK_COUNT" -le 5000 ]; then echo "lock file overflow" | mail -s "Lock Table Alert" your-alert-email@example.com else echo "lock file is ok" | mail -s "Lock Table Status" your-alert-email@example.com fi
整合版脚本(直接从日志提取并判断)
如果不想依赖中间文件fig.txt,可以直接从源日志lngtrans2.out提取数值并完成判断,更适合自动化场景:
#!/bin/bash # 从lngtrans2.out中提取当前使用的锁表条目数 LOCK_COUNT=$(grep "Lock table entries" lngtrans2.out | cut -d " " -f 14) # 阈值判断与邮件发送 if [ "$LOCK_COUNT" -le 5000 ]; then echo "lock file overflow" | mail -s "Lock Table Alert" your-alert-email@example.com else echo "lock file is ok" | mail -s "Lock Table Status" your-alert-email@example.com fi
关键说明
- 数值提取:
grep "Lock table entries" lngtrans2.out | cut -d " " -f 14通过grep定位目标行,再用cut以空格为分隔符提取第14个字段(即当前使用的数值) - 整数比较:
-le是Shell中整数比较的运算符,表示"小于等于",对应还有-gt(大于)等 - 邮件发送:需要确保系统已配置邮件服务(如Postfix、Sendmail),替换
your-alert-email@example.com为实际告警邮箱
参考操作示例
pkity:/tech/cmd/dump# cat lngtrans2.out Lock table entries in use: 8 of 8000 Lock table high water mark: 12 Shared memory allocated: 1788 K (1 segments. The last segment was not locked in memory) pkity:/tech/cmd/dump# grep "Lock table entries" lngtrans2.out | cut -d " " -f 14 > fig.txt pkity:/tech/cmd/dump# cat fig.txt 8
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

