引言
企业内对某设备小集群进行状态巡检(包括内存、磁盘、CPU、集群状态、集群Docker内接口状态、服务状态、Kafka消费情况监控)。
由于需要将状态的结果通过命令展示在命令行中,且查询命令较多,于是打算脚本解决。在写脚本时,查询内容包括了宿主机和docker内的服务都需要查询,脚本是通过内外联动的方式,前面查询都正常,在执行到Kafka消费时报错。以下是脚本内容:
宿主机:
#!/bin/bash #制作人QQ:763342488 #查询系统状态 echo -e "\033[1;5;4;47;32m 查询系统状态 \033[0m" sleep 5 #休眠五秒 echo -e "\033[1;5;4;47;31m 磁盘状态 \033[0m" df -h sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m 内存状态 \033[0m" free -h sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m 系统活动报告 \033[0m" sar -u 1 2 sleep 2 #休眠两秒 #查询*集群健康值及集群关系 echo -e "\033[1;5;4;47;32m 查询* \033[0m" sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m 节点与主机 \033[0m" curl 0.0.0.0:9200/_cat/nodes sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m 健康状态 \033[0m" curl 0.0.0.0:9200/_cluster/health?pretty sleep 2 #休眠两秒
Docker内:(服务以及路劲保密,使用星号代替了)
#!/bin/bash #查询接口状态用脚本 #制作人QQ:763342488 echo -e "\033[1;5;4;47;32m 查询接口状态用脚本,开始运行!!! \033[0m" sleep 5 #休眠五秒 echo -e "\033[1;5;4;47;31m * \033[0m" tail -n 30 /*/`date +"%Y-%m-%d"`.log |grep ftp sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" tail -n 30 /*/`date +"%Y-%m-%d"`.log |grep sftp sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" tail -n 30 /*/`date +"%Y-%m-%d"`.log |grep https sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" tail -n 30 /*/`date +"%Y-%m-%d"`.log |grep sftp #查询服务状态用脚本 echo -e "\033[1;5;4;47;32m 查询服务状态用脚本,开始运行!!! \033[0m" sleep 5 #休眠五秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status *.service #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status *.service #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status *.service #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status *.service #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status * #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status * #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m * \033[0m" systemctl status *.service #* sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;32m kafka消费情况 \033[0m" echo -e "\033[1;5;4;47;31m `date +"%Y-%m-%d"` \033[0m" sleep 2 #休眠两秒 /usr/local/kafka/bin/kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group toptcm-syslog-es echo -e "\033[1;5;4;47;32m * \033[0m" sleep 2 #休眠两秒 echo -e "\033[1;5;4;47;31m `date +"%Y-%m-%d"` \033[0m" ls /*/`date +"%Y%m%d"`/*/ echo -e "\033[1;5;4;47;32m 脚本运行完成,感谢使用~~~ \033[0m"
效率:
在写脚本的时候,无非就是将大量查询命令堆积一起,并且设置格式和字体,让巡检的时候能提高工作效率(摸鱼)而已。两个脚本单独放在宿主机和docker内执行都是正常的,但是里面执行一次,外面执行一次多麻烦啊,想着把内外联动下,只输入一次执行脚本的命令就能内外都查询。于是就在宿主机脚本最下面加了一行。
#docker内 docker exec -it *-server /bin/bash /opt/system.sh
报错:
让宿主机的内容执行完了之后,直接进docker执行里面的脚本,执行到kafka的时候报错如下:
检查了宿主机与Docker内的java环境变量,都是一样的,但在宿主机执行docker内脚本的时候,并不会正确调用java。
.......跳过繁琐的排查过程直接说结果,执行kafka命令前读取一下docker内的环境变量再执行就行了,这条这么写:
结果:
echo -e "\033[1;5;4;47;32m kafka消费情况 \033[0m" echo -e "\033[1;5;4;47;31m `date +"%Y-%m-%d"` \033[0m" sleep 2 #休眠两秒 source /etc/profile /usr/local/kafka/bin/kafka-consumer-groups.sh --describe --bootstrap-server localhost:9092 --group toptcm-syslog-es
/etc/profile内有java的路劲,source一下路劲再执行查询内容即可。
标签:java,47,echo,报错,033,Kafka,两秒,sleep,0m From: https://www.cnblogs.com/lichouluoyu/p/18066123