Web服务自动监控shell _v2
程序员文章站
2022-07-12 21:55:10
...
在线上运行了一段时间发现有时候后台的进程没有down掉,但是web服务不能正常的解析jsp。把web服务重启后,一切恢复正常。
现在,把以前扫描端口的方式修改监控http请求返回的状态码来实现。
操作步骤:
具体实现参考 Web服务自动监控shell
现在,把以前扫描端口的方式修改监控http请求返回的状态码来实现。
操作步骤:
具体实现参考 Web服务自动监控shell
#!/bin/sh ##################################################### #desc:扫描后台服务器的应用服务器,若不能正常访问则重启 #author:gaozhonghui #mail:gaozhh@cdeledu.com #date:20121127 ####################################################### year=`date -d "today" +"%Y"` monthday=`date -d "today" +"%m"` date=$(date -d "today" +"%Y%m%d") #被监控服务器、端口列表 #str = web服务文件夹:端口号 server_all_list=( 'www.test.com^http://127.0.0.1:8050/portal' ) #应用服务器基路径 serverBasePath="/web/webserver/jboss/" #日志路径 logBasePath="/web/webserver/logs/$year/$monthday/" function_getPID(){ local PID=`ps -ef|grep $1|grep java |awk '{print $2}'` echo $PID } function_jstackinfo(){ PID=`function_getPID $1` if [ x$PID != x"" ] ;then if [ ! -d ${logBasePath} ];then mkdir -p ${logBasePath} fi jstack -l ${PID} >> ${logBasePath}"jstack_$1_${date}.log" fi } function_shutdown(){ local shutdownSh=${serverBasePath}$1"/bin/shutdown.sh" if [ -f $shutdownSh ];then local PID=`function_getPID $1` if [ x$PID != x"" ] ;then sh $shutdownSh > /dev/null 2>&1 sleep 2 fi local PID2=`function_getPID $1` if [ x$PID2 != x"" ];then kill -9 $PID2 fi fi } function_startup(){ local startupSh=${serverBasePath}$1"/bin/startup.sh" if [ -f $shutdownSh ];then sh $startupSh > /dev/null 2>&1 fi } function_restart(){ function_shutdown $1 sleep 5 function_startup $1 } #获得http 状态码 function_getHttpCode(){ local http_code=`curl -o /dev/null -s -m $1 --connect-timeout $1 -w %{http_code} $2` local first_http_code=${http_code:0:1} echo $first_http_code } for server in ${server_all_list[@]}; do server_ip=127.0.0.1 server_name=$(echo ${server} | awk -F '^' '{print $1}') server_url=$(echo ${server} | awk -F '^' '{print $2}') http_code_10s=`function_getHttpCode 10 $server_url` if [ "$http_code_10s" != "0" ] && [ "$http_code_10s" != "4" ] && [ "$http_code_10s" != "5" ];then #status: 0,http down 1,http ok 2,http down but ping ok status=1 else http_code_30s=`function_getHttpCode 30 $server_url` if [ "$http_code_30s" != "0" ] && [ "$http_code_10s" != "4" ] && [ "$http_code_10s" != "5" ];then status=1 else if ping -c 1 $server_ip > /dev/null 2>&1;then status=2 else status=0 fi fi fi #根据不同状态操作服务 if [ x$status != x"1" ];then PID=`function_getPID ${server_name}` if [ x$PID != x ];then function_jstackinfo ${server_name} function_restart ${server_name} else function_startup ${server_name} fi fi done