Shell脚本如何组合多条件判断应用运行状态
应用运行状态双条件检测Shell实现方案
核心判定规则:仅当test-core进程存在、应用访问URL返回200响应两个条件同时满足时,判定应用整体运行正常。
实现思路
你原脚本已经完成了两个单项检测的逻辑,只需要额外做简单改造即可:
- 为两项检测分别定义状态标记变量,检测通过时将对应标记设为成功值
- 最后对两个标记做逻辑与判断,只有全部为成功时输出整体运行正常的结论
- 额外给curl增加超时参数,避免网络异常时脚本永久卡住
改造后完整代码
#!/bin/bash # 初始化两个检测项的状态标记:0代表异常,1代表正常 pid_ok=0 url_ok=0 # 检测1:java connector服务进程状态 echo "Checking health of java connectors" PID=$(ps -ef | grep test-core | grep -v grep | awk '{print $2}') if [ -n "$PID" ]; then echo "INFO: Java connector service is running" pid_ok=1 else echo "WARNING: Java connector service is not running" fi # 检测2:应用URL访问状态,增加5秒超时避免脚本卡死 echo "Checking application URL status" status="$(curl -Is -m 5 http://172.217.23.16/application/authenticate | head -1)" validate=( $status ) if [ "${validate[-2]}" == "200" ]; then echo "INFO: Application URL is up and running" url_ok=1 else echo "WARNING: Application URL is NOT RESPONDING" fi # 最终组合判断:两个条件同时满足才判定整体正常 echo "================ Final Health Check Result ================" if [ $pid_ok -eq 1 ] && [ $url_ok -eq 1 ]; then echo "Application is running OK" else echo "Application is ABNORMAL, please check the warning logs above" fi
关键逻辑说明
- 逻辑与判断用Shell原生的
&&运算符实现,只有运算符前后两个判断条件都成立时,才会进入对应分支 - 状态标记变量独立存储单项检测结果,后续如果要加更多检测项(比如端口检测、磁盘剩余空间检测),只需要新增对应标记变量,最后统一加入最终判断即可
- 给curl加
-m 5参数是生产环境脚本的常用优化,设置最大请求时长5秒,避免网络不通时脚本无限等待
内容的提问来源于stack exchange,提问作者user15566016
相关产品推荐
相关产品推荐

