`
zhengdl126
  • 浏览: 2512726 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

监控Nginx服务的Shell脚本

 
阅读更多

 

 

 

 

Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了。

我们一台支付机,偶尔会出现以下情况的:php-cgi 进程突然消失了,造成PHP脚本无法访问;更不可思议的是明明是php-cgi 打开有两个端口在监听的,莫名其秒的突然有一个php-cgi 的端口被关闭了,造成所有请求全积在一个端口上,
结果造成PHP脚本访问异常。

基本这种情况,我写了个监控shell脚本的解决方案,不管以上出现那种情况,都自动恢复Nginx的服务.该脚本在生产环境上运行正常:

#!/bin/bash
#
# filename: webservermonitor.sh
# 功能:监控 nginx 的 php-cgi 是否正常
# 作者:V哥
# 运行: webservermonitor.sh &
#

# php-cgi 监听的IP和端口
V_PHP_CGI_PORT="127.0.0.1:9000 127.0.0.1:9001"

# nginx重启的脚本
V_NGINX="/usr/local/nginx/sbin/restart.sh"

# 日志文件
V_LOG="/tmp/webservermonitor.log"

# 函数定义:重启nginx
function restart_nginx(){
    echo "----- `date` -----" >> $V_LOG
    echo "------------------" >> $V_LOG
    echo "`ps aux |grep 'nginx'`" >> $V_LOG
    echo "------------------" >> $V_LOG
    echo "`ps aux |grep 'php-cgi'`" >> $V_LOG
    echo "------------------" >> $V_LOG
    echo "`netstat -nlpt | grep 'php-cgi'`" >> $V_LOG
    echo "------------------" >> $V_LOG
    $V_NGINX  >> $V_LOG
}

# 循环执行,不采用 crontab ,国为 crontab 最小单位是分钟,时间太长了
while :
do

    # 1:先检测 nginx 主进程是否存在
    V_NGINX_NUM=`ps axu |grep 'nginx' |grep -v 'grep' |wc -l`
    if [ $V_NGINX_NUM -lt 1 ];then
        restart_nginx
        continue
    fi

    # 2:再检查php-cgi是否有进程存在
    V_PHP_CGI_NUM=`ps axu |grep 'php-cgi' |grep -v 'grep' |wc -l`
    if [ $V_PHP_CGI_NUM -lt 1 ];then
        restart_nginx
        continue
    fi

    # 3:再判断端口是否正常
    for PORT in $V_PHP_CGI_PORT
    do
        V_NUM=`eval "netstat -nlpt | grep '${PORT}' | wc -l"`
        if [ $V_NUM -lt 1 ];then
            restart_nginx
            continue
        fi
    done

    # 休眠
    sleep 5
done
 

 

分享到:
评论

相关推荐

    监控linux服务器状态以及nginx,php等服务状态的shell脚本

    有时候服务器的并发量大时会导致服务器宕机或者请求服务器返回502等信息,故为了能在出现上述情况后第一时间 服务器自我处理

    shell脚本(监控日志发告警邮件)

    监控生产环境nginx日志发告警邮件,需要使用linux系统的定时任务,如5分钟执行或者其他时间间隔

    常用shell 脚本,dos攻击防范,

    常用shell脚本, Dos攻击防范(自动屏蔽攻击IP).sh 一键部署等等 Linux系统发送告警脚本.sh MySQL数据库备份单循环.sh MySQL数据库备份多循环.sh nginx 访问访问日志按天切割.sh nginx.conf nginx访问日志分析...

    Linux Shell脚本经典案例合集

    18个Linux Shell脚本经典案例合集,内含: Dos攻击防范(自动屏蔽攻击IP).sh Linux系统发送告警脚本.sh MySQL数据库备份单循环.sh MySQL数据库备份多循环.sh nginx 访问访问日志按天切割.sh nginx访问日志分析脚本.sh...

    18个Linux Shell脚本经典案例视频.zip

    18个Linux Shell脚本经典案例(1-18) 脚本 Dos攻击防范(自动屏蔽攻击IP) Linux系统发送告警脚本 MySQL数据库备份单循环 MySQL数据库备份多循环 nginx 访问访问日志按天切割 nginx nginx访问日志分析脚本 一键查看...

    监控php-fpm并自动重启服务的shell脚本

    主要介绍了监控php-fpm并自动重启服务的shell脚本,脚本的主要功能:不断检查网站的状态,如果异常就重启php-fpm服务,需要的朋友可以参考下

    应用服务监控脚本用shell写的

    此脚本写得非常通用,只要修改check.d目录下的配置文件就可以,conf目录下为主配置文件,check.d目录下主要是你想要监测的服务的配置文件,我的里面有例子!可以监控nginx ,apache ,mysql ,ftp ,等

    100个shell脚本合集

    shell脚本合集,包括linux告警、mysql备份、nginx日志分析、系统初始化配置、服务器资源监控、lamp脚本、linux故障检测、自动发布java项目、入侵与检测、端口扫描正则匹配、一键安装脚本等等

    Shell脚本实现的memcached进程监控

    WEB服务器使用memcached,但是不知道为什么memcached老是挂掉(基本20分钟~50分钟左右),导致部分网站页面在访问的时候出错;定义日志后,查看日志也未能发现什么;...nginx=`/usr/local/nginx/sbin/nginx -s reload

    ljohn_ops:Linux运维工作中常用的shell脚本

    ssh_without_pass 免秘钥处理2018.04.26win_bashwin批处理oracle备份脚本2018.03.26logrotate日志切割,nginx,php等模板,nohup_split 等脚本2018.02.24zabbixredis 监控2018.02.01backup文件目录备份,日志备份2018....

    让Linux下的cron以秒为单位执行shell脚本的3种方法

    需要用到Shell脚本每隔3秒钟去监控一个软件进程的运行状态,发现crond似乎只支持到分,不知道秒,怎么办呢? 第一种方法: 当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下: cat kick...

    防止cc攻击监控脚本

    C攻击是DDOS(分布式拒绝服务)的一种,相比其它的DDOS攻击CC似乎更有技术含量一些。这种攻击你见不到虚假IP,见不到特别大的异常流量,但造成服务器无法进行正常连接。最让站长们忧虑的是这种攻击技术含量低,利用...

    Linux运维从入门到高级全套案例v3.rar

    4.1.4 Shell脚本案例 4.1.5Shel1数组编程 5. Linux深入篇 5.1构建 Nginx WEB服务器 Nginx WEB安装 5.1.2 nginx虚拟主机配置 5.1.3 nginx性能优化 5.1.4 nginx参数深入理解 5.1.5 Nginx Rewrite规则 面面面面 5.2构建...

    Linux运维从入门到高级全套案例v3

    4.1. 4 Shell脚本案例 67 4.1. 5 Shell数组编程 71 5. Linux深入篇 72 5. 1 构建Nginx WEB服务器 72 5.1. 1 Nginx WEB安装 73 5.1. 2 Nginx 虚拟主机配置 74 5.1. 3 Nginx性能优化 75 5.1. 4 Nginx参数深入理解 77 ...

    使用shell脚本分析网站日志统计PV、404、500等数据

    下面的脚本能统计出网站的总访问量,以及404,500出现的次数。统计出来后,我们可以结合监控宝来进行记录,进而可以看出网站访问量是否异常,是否存在攻击,一目了然。还可以根据查看500出现的次数,进而判断网站程序...

    一个shell for循环与case结合的脚本(监控程序状态)

    核心代码: 代码如下:#/bin/bashset -xHOSTS=”nginx mysql php-cgi”for myhost in $... then case $myhost in nginx) cd /usr/local/webserver/nginx/sbin/ ./nginx echo “nginx has be down” sleep 5 my

    如何利用shell开发keepalived启动脚本

    Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务(例如:...

    Linux云计算运维-全集

    shell脚本高手速成 Web大并发集群部署 Web服务器-Apache Web服务器-Nginx Web服务器-Tomcat 部署高可用集群 构建可视化数据分析系统-ELK 企业级监控系统-Zabbix 容器监控-Prometheus 数据安全之企业存储 虚拟化之KVM

    Docker镜像大礼包.zip

    ,Linux运维安装工具及脚本,K8S构建,各个环境构建部署等,包括不限于于shell、python,运维脚本、docker脚本、各种工具库,收集各类运维常用工具脚本,实现快速安装nginx、mysql、pg、apache、php、redis、tomcat ...

Global site tag (gtag.js) - Google Analytics