其实就是一个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 是一个基于 VRRP 协议的高可用性解决方案,旨在提供高可用性的负载均衡解决方案。本操作手册主要介绍如何使用 Keepalived 监控 Nginx 进程,实现系统的负载均衡。 ...
【runit服务管理服务进程-自动拉起】 runit 是一款轻量级的服务管理系统,尤其适合于嵌入式系统和小型服务器。它以其简洁、高效和低资源消耗而受到青睐。runit 提供了两个核心功能:在系统启动时启动预设的服务,...
对于Web服务器来说,Nginx以其高效、稳定的特点受到青睐,而监控Nginx的状态则能帮助我们及时发现并解决问题。本教程将详细介绍如何使用Zabbix监控Nginx的status模块,以及如何导入提供的模板“zabbix_monitor_nginx...
`nginx-conf-watcher.bat`是一个批处理文件,用于启动监控进程;`nginx-conf-watcher.exe`可能是用于实际监控的可执行程序;`nginx-conf-watcher.js`则可能是用JavaScript编写的支持脚本,负责定义监控逻辑。 使用`...
可以查出系统中所有nginx进程,直接kill进程,一键搞定他,
Zabbix提供了Nginx模板,可以监控Nginx的关键指标,如服务器状态、连接数、请求速率等。通过导入`zabbix监控nginx模版文件`,你可以设置阈值报警,当Nginx服务出现异常时,Zabbix会立即通知管理员。 2. **Zabbix...
Nginx 是一款高性能的开源 Web 服务器和反向代理服务器,以其卓越的性能、高度的可扩展性和低系统资源消耗而闻名。在使用 Nginx 时,一个优秀的配置文件是确保服务器正常运行和优化性能的关键。以下是一个典型的 ...
Nginx RTMP服务器可以通过日志记录推流、拉流等事件,便于监控服务器状态和诊断问题。 总结,Nginx RTMP服务器是一个强大且灵活的解决方案,适用于搭建和管理实时流媒体服务。通过合理的配置,可以实现高效的流...
详细说明了windows服务器nginx+tomcat+mysql部署及配置(配置阿里云后台安全组,配置域名)很适合新手学习 附件中包含: 1.操作说明文档 2.操作录屏 3.安装所用到的软件安装包 1)Windows Server 2019 数据中心版 ...
针对"Python监控Nginx upstream状态"这一主题,我们将深入探讨如何使用Python编程语言来监测Nginx服务器与其upstream(后端服务器)之间的交互,以及当检测到后端服务器出现问题时,如何通过钉钉通知系统进行报警。...
如果服务器中nginx挂掉,我们如何第一时间启动它?人工重启?no。 该脚本定时检测nginx状态,挂机自动重启nginx。 如果服务器中nginx挂掉,我们如何第一时间启动它?人工重启?no。 该脚本定时检测nginx状态,...
总结来说,从Nginx的角度看服务器多进程模型设计,我们能学到如何通过主工作进程结构实现高效的并发处理,理解非阻塞I/O和共享内存通信在提升性能中的作用,以及如何利用多进程来确保服务的稳定性和资源隔离。...
本教程将详细讲解如何利用Zabbix实现对Nginx upstream服务器的自动检测与故障报警,无需额外安装Python插件,且兼容Python2和Python3。 首先,Nginx是一款高性能的反向代理服务器,常用于负载均衡,通过upstream...
安装SSL证书时,强行杀掉了Nginx的进程,就再也没起来: Restarting nginx daemon: nginxcat: /usr/local/nginx/logs/nginx.pid: No such file or directorykill: usage: kill [-s sigspec | -n signum | -sigspec] ...
总之,通过以上步骤,你可以成功地在服务器上部署Spring Boot应用,利用Nginx进行反向代理,提高系统的可访问性和可靠性。对于大型项目,理解这些部署和配置细节至关重要,有助于优化应用程序的性能和稳定性。
在IT行业中,Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力而闻名。本教程将详细介绍如何在Linux系统上通过自动化脚本来快速安装Nginx,旨在简化传统手动安装过程,提高效率。 一、Nginx简介 ...
Prometheus能够自动化监控Nginx的`server_name`和`upstream`,并允许用户自定义标签来区分不同环境和项目的Nginx实例。 核心组件包括: 1. **nginx-module-vts**: 这是Nginx的一个虚拟主机流量状态模块,能够输出...
批处理文件可能是`start_nginx.bat`或类似的文件,双击它会自动执行启动服务器的命令。 Nginx RTMP服务器的配置文件通常为`nginx.conf`,在这个文件中,用户可以定义RTMP服务器的基本设置,如监听端口、流媒体路径...
一步步安装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配置推送到其他服务器,确保所有服务器配置的一致性,避免因配置不一致导致的问题。 六、自动化LNMP搭建 LNMP(Linux + Nginx + MySQL + PHP)是...