- 问题起源
- 之前写的系统巡检脚本,如果检测到异常会一直发消息通知我🤫
- 1.png
- 实在是太烦人,其实发送一次就行了,然后正常了再发送一次就行了😒
- 突然想起来我可以使用json做配置文件,毕竟我系统上面安装了jq
- 可以用来解析json的数据,当然你如果没有安装的话可以安装
- 毕竟Bash本身缺乏内置的json解析能力,使用jq命令行进行处理json,可以填补这一空白
- 安装命令
sudo apt-get install jq
- 解决方法
- 我的想法是通过默认json配置文件,如果异常就修改字段
- 然后再推送消息,下一次判断服务变更的时候,跟默认的配置是否一致
- 不一致的时候发送信息就行了,这样子只要是配置字段不一样的时候才发送信息
- 就不会疯狂的推送消息给我,只有在配置修改的时候发送就行了
- 配置文件
- 既然使用了json做配置,那就顺便把定义的变量也放进配置里面
- 2.png
- 创建配置
touch date.json
{ "waf": { "time": "60", "file": "/www/server/nginx/logs/waf/" }, "status": { "temperature": "55", "disk_threshold": "80", "mem_threshold": "50", "cpu_threshold": "50", "service": "80,88,8080,3030,25565,23333", "bmc": "正常" }, "notice_qq": "2117944029,2061667753" }
- 3.png
- 获取数据
- 我只是需要监控bmc的状态,其他的服务状态就不需要弄了😏
- 比如磁盘如果报警也没必要就提醒一次,因为他也不可以自己会空
- 还有就是CPU内存之类的实时监控的效果就没有了,超过阈值就一直报警
- 谁知道是服务器被攻击还是啥🙄
- 获取二级字段
jq '.status.bmc' data.json | sed 's/"//g'
- 输出正常,说明成功获取到字段了
- 4.png
- 后面的sed是过滤"的,不然输出就是"正常"了
- 那现在就修改变量获取的配置
- 5.png
- 修改数据
- 可以通过
jq '.status.bmc = "离线"' data.json
- 来获取修改后的内容
- 6.png
- 写入数据
- 写入的话就直接用echo就行了
echo -n $(jq '.status.bmc = "离线"' /media/buyan/1/脚本监控/系统巡检/data.json)>/media/buyan/1/脚本监控/系统巡检/data.json
- 加-n是取消后面的换行
- 判断数据
- 直接通过判断jq '.status.bmc' data.json | sed 's/"//g'是否等于某一个值就行
if [ $(jq '.status.bmc' data.json | sed 's/"//g') == "正常" ] ; then echo "ok" else echo "no" fi
- 7.png
- 修改脚本
- 找到代码块
- 8.png
- 加入上面的判断
- 9.png
- 当然这里我只是截了一个异常处理代码块的图
- 异常的时候判断配置文件的字段是不是离线的,不然就修改然后推送信息
- 正常的时候也是一样,如果配置是不是在线的,就修改配置进行推送信息
- 如果状态跟配置字段是一样的就不进行操作
- 执行测试
- 先断开bmc的链接,过一下再连接
- 10.png
- 11.png
- 发现只是推送一次,完美解决
【Bash使用或解析json做配置】
开始
完结