`
cocos
  • 浏览: 400361 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

腾讯服务器监控nginx进程,自动拉起

阅读更多
其实就是一个ps进程探测,
后面写一个分析
文件先贴出来。
#! /bin/sh

###file_ver=2.0.3

PATH=$PATH:.

#monitor the application
#create by leonlaili,2006-12-6

####### Custom variables begin  ########
##todo: add custom variables here
#get script path
dir_pre=$(dirname $(which $0))
####### Custom variables end    ########

#load common functions
load_lib()
{
    common_file=$dir_pre/common.sh
    if [ -f $common_file ];then
        . $common_file
    fi
}

#check current user
check_user()
{
    if [ "$user" != "`whoami`" ];then
        echo "Only $user can execute this script"
        exit 1
    fi
}

#print help information
print_help()
{
    ##todo: output help information here
    # echo ....
    return 
}

#check script parameters
check_params()
{
    ok="true"
    ##todo: add addition parameters checking statement here...
    
    if [ "$ok" != "true" ];then
        echo "Some of the parameters are invalid. "
        print_help
        exit 1
    fi
}

get_app_num()
{
    numbers=`echo $app_name | sed -e "s:[ \t]:\n:g" | grep "^$1[:$]" | awk -F: '{print $2}'`
    num1=`echo $numbers|awk -F, '{print $1}'`
    num2=`echo $numbers|awk -F, '{print $2}'`

    if [ "${num1}" = "" ];then
        num1=1
    fi

    if [ "${num2}" = "" ];then
        num2=999999999
    fi
    
}

#check port
check_port()
{
    nc_cmd="/usr/bin/nc"
    if [ ! -f $nc_cmd ];then
        nc_cmd="/usr/bin/netcat"
    fi

    $nc_cmd -zn -w4 $1 $2
    if [ $? -ne 0 ];then
        for (( i=0 ; i<5 ; i++ ))
        do
            $nc_cmd -zn -w4 $1 $2
            if [ $? -eq 0 ];then return 0;fi
            sleep 1
        done
        #check VIP again
        if [ "$vip" != "" ];then
            for (( i=0 ; i<5 ; i++ ))
            do
                $nc_cmd -zn -w4 $vip $2
                if [ $? -eq 0 ];then return 0;fi
                sleep 1
            done
        fi
        err_port="$err_port $p"
        return 1 
    fi
    return 0
}

#check process
check_process()
{
    get_app_num $1
    app=`echo $1 | awk -F: '{print $1}'`
    num=`ps -C $app | sed -e "1d" | wc -l`
    if [ $num -lt $num1 -o $num -gt $num2 ];then
        err_app="$err_app $app"
        return 1
    fi
    return 0
}

#check if application is ok
check_app()
{
    if [ ! -f $runing_file ];then
        return 0
    fi

    if [ "$ip_type" = "0" ];then
        bind_ip=$ip_inner
    elif [ "$ip_type" = "1" ];then
        bind_ip=$ip_outer
    elif [ "$ip_type" = "2" ];then
        bind_ip="0.0.0.0"
    elif [ "$ip_type" = "3" ];then
        bind_ip=$vip
    elif [ "$ip_type" = "4" ];then
        bind_ip=127.0.0.1
    fi 
 
    ##todo: add application checking statement here
    err_app=""
    err_port=""

    run_config "monitor"

}

#resolve the problems of application
resolve_app()
{

    #发送告警信息
    report "Monitor: restart [process:${err_app}][port:${err_port}]"

    ##todo: add custom statement here

    run_config "resolve"

    return
}

#report monitor result infomation
rpt_info()
{
    local rtype="$1"
    local elem="$2"
    local action="$3"
    report_ip=172.16.211.50
    url_head="http://$report_ip/pkg/monitor_rpt.php"
    response_file="/tmp/.monitor_report.tmp"
    wget_options="-T 10 -O $response_file --connect-timeout=5"
    
    wget $wget_options "${url_head}?ip=${ip_inner}&install_path=${install_path}&type=${rtype}&elem=${elem}&action=${action}" > /dev/null 2>&1
        
    rm $response_file 2>/dev/null
}


###### Main Begin ########
if [ "$1" = "--help" ];then
    print_help
    exit 0
fi

load_lib
check_user
check_params
check_app
if [ "$err_app" != "" -o "$err_port" != "" ];then
    resolve_app
fi

if [ "$err_app" != "" ];then
    err_app_list=`echo "$err_app" | sed -e 's/ /,/g' -e 's/^,//' -e 's/,$//'`
    rpt_info 'app' "$err_app_list" "restart"
fi

if [ "$err_port" != "" ];then
    err_port_list=`echo "$err_port" | sed -e 's/ /,/g' -e 's/^,//' -e 's/,$//'`
    rpt_info 'port' "$err_port_list" "restart"
fi
###### Main End   ########



framework_ver=2.0.7
<!--程序包基本信息-->
<base_info>
#程序作者
author="funnychen"
#所属产品
product="third"
#模块
module=""
#软件包名称
name="nginx"
#进程名不能超过15字符,多个进程空格间隔,可指定进程数量.app:min,max,如app_name:1,20
app_name="nginx"
#进程监听TCP端口!仅限TCP端口,多个端口使用空格间隔
port="80"
#TCP端口绑定ip类型!仅限TCP端口 0:内网;1:外网;2:0.0.0.0;3:VIP;4:127.0.0.1
ip_type="2"
#软件包版本
version="0.7.67"
#所属用户
user="root"
#停止进程信号量
kill_sig="KILL"
#是否开机启动[0|1]
auto_start="1"
#开机启动脚本存放文件
boot_path="/usr/local/services/etc/svc.sh"
#日志目录(日志直接存放在安装目录请设为空)
log_dir="/data/log/$name-$version"
#告警特性ID(默认不需要修改)
rpt_port="5570"
#基础安装目录(请勿修改)
install_base="/usr/local/services"
#系统使用变量请勿修改
install_path="/usr/local/services/nginx-0.7.67"
#是否强制在老目录安装(请勿修改)
force_install="false"
</base_info>

<!--安装时创建文件链接-->
<link>
cd $install_path
ln -s log logs

rm /usr/local/nginx 2>/dev/null
ln -s $install_path /usr/local/nginx
</link>







<!--程序启动方式,请使用相对bin目录的路径-->
<start>
#限制core文件大小为4k,用于进程coredump监控
ulimit -c 4 -S
ulimit -n 100001

#-----单进程名程序包请在这添加启动命令-----
./nginx

#-----多进程名程序包请在这添加启动命令-----
#每个进程复制一份if语句,注意保留if判断逻辑并修改内部的示例进程名app_test
#变量app_to_start为需要启动的进程名,不需要修改
#if [ "$app_to_start" = "app_test" -o "$app_to_start" = "all" ];then
#    ./app_test &
#fi
</start>



<!--自定义crontab调度,请使用/usr/local/services/nginx-0.7.67占位符-->
<!--Example: "0 0 * * * /usr/local/services/nginx-0.7.67/admin/start.sh &" -->
<crontab>
*/3 * * * * /usr/local/services/nginx-0.7.67/admin/monitor.sh > /usr/local/services/nginx-0.7.67/log/crontab.log 2>&1 &
*/15 * * * * /usr/local/services/nginx-0.7.67/admin/clear.sh file > /usr/local/services/nginx-0.7.67/log/crontab.log 2>&1 &
15 8 * * * /usr/local/services/nginx-0.7.67/admin/md5sum.sh check > /usr/local/services/nginx-0.7.67/log/crontab.log 2>&1 &
0 0 * * * /usr/local/services/nginx-0.7.67/tools/log_clear.sh > /usr/local/services/nginx-0.7.67/log/log_clear.log 2>&1 &
</crontab>


<!--程序停止方式-->
<stop>
#停止进程后等待时间(秒)
sleep_count=1

#变量app_to_stop为需要启动的进程名

if [ $app_count -gt 1 -a "$app_to_stop" != "all" ];then
    kill_app $app_to_stop $kill_sig
    sleep $sleep_count
    return
fi

for app_info in $app_name
do
    app=`echo $app_info | awk -F: '{print $1}'`
    kill_app $app $kill_sig
    sleep $sleep_count
done
</stop>

<!--程序状态检测,若检测异常则添加异常进程名到err_app或添加异常端口到err_port-->
<monitor>
#进程数量检测
for app_info in `cat $runing_file`
do
    check_process "$app_info"
done

#端口检测
for p in `echo $port`
do
    check_port "$bind_ip" "$p"
done
</monitor>

<!--程序异常处理,根据状态检测是否正常决定-->
<resolve>
for app in `echo $err_app`
do
    $install_path/admin/restart.sh $app
done
</resolve>

<!--需要进行md5校验的文件列表,请使用相对安装目录的路径,带"<空格>-"后缀为不需要进行校验-->
<md5>
bin/*
lib/*
admin/*
bin/*.pid -
bin/*core* -
bin/*.tmp -
bin/*.stat -
bin/*.log -
bin/*.data -
bin/*.dat -
bin/*.bin -
bin/*.info -
</md5>

<!--需要进行安装时替换内容的文件列表,请使用相对安装目录的路径-->
<substitute>
init.xml
conf/*
etc/*
</substitute>

<!--数据清理配置-->
<clear_file>
#目录              #阀值        #命令  #参数 #目标
log                85%:2000M    tar    10    *.log
admin/data/backup  90%:50M      tar    10    *
admin/data/tmp     90%:10M      delete 1     *

#----说明-----
#目录:需要监控的目录,使用相对安装目录路径
#阀值:触发清理操作的条件[分区使用百分比:目录最大空间<M|m>]
#命令:delete(删除指定时间前文件),tar(压缩指定时间前文件),clear(清空超过指定大小文件)
#参数:delete,tar(默认天数,后缀h为小时,m为分钟),clear(文件大小k)
#目标:可以清理的文件,接受通配符

#----示例-----
#目录     #阀值    #命令   #参数  #目标
#log      80%:10M  delete  30     stat*.log
#data     90%:10M  tar     30     */*.dat
#log      90%:10M  clear   50000  debug/err*.log
</clear_file>


<install_on_complete>
chown user_00.users $install_path/conf/*
</install_on_complete>




分享到:
评论

相关推荐

    keepalived监控nginx进程

    Keepalived 监控 Nginx 进程操作手册 Keepalived 是一个基于 VRRP 协议的高可用性解决方案,旨在提供高可用性的负载均衡解决方案。本操作手册主要介绍如何使用 Keepalived 监控 Nginx 进程,实现系统的负载均衡。 ...

    runit服务管理服务进程-自动拉起

    【runit服务管理服务进程-自动拉起】 runit 是一款轻量级的服务管理系统,尤其适合于嵌入式系统和小型服务器。它以其简洁、高效和低资源消耗而受到青睐。runit 提供了两个核心功能:在系统启动时启动预设的服务,...

    zabbix中监控nginx的status需要的模板

    对于Web服务器来说,Nginx以其高效、稳定的特点受到青睐,而监控Nginx的状态则能帮助我们及时发现并解决问题。本教程将详细介绍如何使用Zabbix监控Nginx的status模块,以及如何导入提供的模板“zabbix_monitor_nginx...

    Windows平台,Nginx配置文件修改自动加载重启

    `nginx-conf-watcher.bat`是一个批处理文件,用于启动监控进程;`nginx-conf-watcher.exe`可能是用于实际监控的可执行程序;`nginx-conf-watcher.js`则可能是用JavaScript编写的支持脚本,负责定义监控逻辑。 使用`...

    结束所有nginx进程-一键干死nginx

    可以查出系统中所有nginx进程,直接kill进程,一键搞定他,

    zabbix监控nginx、php-fpm、apache监控模版文件

    Zabbix提供了Nginx模板,可以监控Nginx的关键指标,如服务器状态、连接数、请求速率等。通过导入`zabbix监控nginx模版文件`,你可以设置阈值报警,当Nginx服务出现异常时,Zabbix会立即通知管理员。 2. **Zabbix...

    优雅配置Nginx服务器(nginx)

    Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,以其卓越的性能、高度的可扩展性和低系统资源消耗而闻名。在使用 Nginx 时,一个优秀的配置文件是确保服务器正常运行和优化性能的关键。以下是一个典型的 ...

    nginx rtmp转发服务器

    Nginx RTMP服务器可以通过日志记录推流、拉流等事件,便于监控服务器状态和诊断问题。 总结,Nginx RTMP服务器是一个强大且灵活的解决方案,适用于搭建和管理实时流媒体服务。通过合理的配置,可以实现高效的流...

    windows服务器部署 nginx+tomcat+mysql服务器端部署 阿里云服务器部署及配置

    详细说明了windows服务器nginx+tomcat+mysql部署及配置(配置阿里云后台安全组,配置域名)很适合新手学习 附件中包含: 1.操作说明文档 2.操作录屏 3.安装所用到的软件安装包 1)Windows Server 2019 数据中心版 ...

    python监控nginx upstrem状态

    针对"Python监控Nginx upstream状态"这一主题,我们将深入探讨如何使用Python编程语言来监测Nginx服务器与其upstream(后端服务器)之间的交互,以及当检测到后端服务器出现问题时,如何通过钉钉通知系统进行报警。...

    centos实时监测nginx 挂机自动重启服务

    如果服务器中nginx挂掉,我们如何第一时间启动它?人工重启?no。 该脚本定时检测nginx状态,挂机自动重启nginx。 如果服务器中nginx挂掉,我们如何第一时间启动它?人工重启?no。 该脚本定时检测nginx状态,...

    从nginx角度看服务器多进程模型设计

    总结来说,从Nginx的角度看服务器多进程模型设计,我们能学到如何通过主工作进程结构实现高效的并发处理,理解非阻塞I/O和共享内存通信在提升性能中的作用,以及如何利用多进程来确保服务的稳定性和资源隔离。...

    zabbix 自动检测nginx upstream.zip

    本教程将详细讲解如何利用Zabbix实现对Nginx upstream服务器的自动检测与故障报警,无需额外安装Python插件,且兼容Python2和Python3。 首先,Nginx是一款高性能的反向代理服务器,常用于负载均衡,通过upstream...

    重启或杀掉Nginx进程后丢失nginx.pid的解决办法

    安装SSL证书时,强行杀掉了Nginx的进程,就再也没起来: Restarting nginx daemon: nginxcat: /usr/local/nginx/logs/nginx.pid: No such file or directorykill: usage: kill [-s sigspec | -n signum | -sigspec] ...

    服务器使用Nginx部署Springboot项目的详细教程(jar包)

    总之,通过以上步骤,你可以成功地在服务器上部署Spring Boot应用,利用Nginx进行反向代理,提高系统的可访问性和可靠性。对于大型项目,理解这些部署和配置细节至关重要,有助于优化应用程序的性能和稳定性。

    nginx自动安装

    在IT行业中,Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力而闻名。本教程将详细介绍如何在Linux系统上通过自动化脚本来快速安装Nginx,旨在简化传统手动安装过程,提高效率。 一、Nginx简介 ...

    用Prometheus细化Nginx监控

    Prometheus能够自动化监控Nginx的`server_name`和`upstream`,并允许用户自定义标签来区分不同环境和项目的Nginx实例。 核心组件包括: 1. **nginx-module-vts**: 这是Nginx的一个虚拟主机流量状态模块,能够输出...

    rtmp服务器 nginx 1.7.11.3 Gryphon

    批处理文件可能是`start_nginx.bat`或类似的文件,双击它会自动执行启动服务器的命令。 Nginx RTMP服务器的配置文件通常为`nginx.conf`,在这个文件中,用户可以定义RTMP服务器的基本设置,如监听端口、流媒体路径...

    一步步安装nginx搭建流媒体服务器

    一步步安装nginx搭建流媒体服务器的所有软件打包; nginx-1.8.0.tar.gz :应用服务器主程序 nginx_mod_h264_streaming-2.2.7.tar.gz :MP4流媒体支持模块。 openssl-1.0.1c.tar.gz :openssl库 pcre-7.9.tar.gz :...

    nginx的自动化软件包

    这个自动化软件包可能提供了远程同步功能,能够将一台服务器的Nginx配置推送到其他服务器,确保所有服务器配置的一致性,避免因配置不一致导致的问题。 六、自动化LNMP搭建 LNMP(Linux + Nginx + MySQL + PHP)是...

Global site tag (gtag.js) - Google Analytics