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

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

结果造成PHP脚本访问异常。

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

  1. #!/bin/bash
  2. #
  3. # filename: webservermonitor.sh
  4. # 功能:监控 nginx 的 php-cgi 是否正常
  5. # 运行: webservermonitor.sh &
  6. #
  7. # php-cgi 监听的IP和端口
  8. V_PHP_CGI_PORT="127.0.0.1:9000 127.0.0.1:9001"
  9. # nginx重启的脚本
  10. V_NGINX="/usr/local/nginx/sbin/restart.sh"
  11. # 日志文件
  12. V_LOG="/tmp/webservermonitor.log"
  13. # 函数定义:重启nginx
  14. function restart_nginx(){
  15. echo "----- `date` -----" >> $V_LOG
  16. echo "------------------" >> $V_LOG
  17. echo "`ps aux |grep 'nginx'`" >> $V_LOG
  18. echo "------------------" >> $V_LOG
  19. echo "`ps aux |grep 'php-cgi'`" >> $V_LOG
  20. echo "------------------" >> $V_LOG
  21. echo "`netstat -nlpt | grep 'php-cgi'`" >> $V_LOG
  22. echo "------------------" >> $V_LOG
  23. $V_NGINX  >> $V_LOG
  24. }
  25. # 循环执行,不采用 crontab ,国为 crontab 最小单位是分钟,时间太长了
  26. while :
  27. do
  28. # 1:先检测 nginx 主进程是否存在
  29. V_NGINX_NUM=`ps axu |grep 'nginx' |grep -v 'grep' |wc -l`
  30. if [ $V_NGINX_NUM -lt 1 ];then
  31. restart_nginx
  32. continue
  33. fi
  34. # 2:再检查php-cgi是否有进程存在
  35. V_PHP_CGI_NUM=`ps axu |grep 'php-cgi' |grep -v 'grep' |wc -l`
  36. if [ $V_PHP_CGI_NUM -lt 1 ];then
  37. restart_nginx
  38. continue
  39. fi
  40. # 3:再判断端口是否正常
  41. for PORT in $V_PHP_CGI_PORT
  42. do
  43. V_NUM=`eval "netstat -nlpt | grep '${PORT}' | wc -l"`
  44. if [ $V_NUM -lt 1 ];then
  45. restart_nginx
  46. continue
  47. fi
  48. done
  49. # 休眠
  50. sleep 5
  51. done

监测NGINX服务的shell脚本的更多相关文章

  1. 监控Nginx服务的Shell脚本

    Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...

  2. telnet登录路由器启动服务的shell脚本

    因为在测试中经常要telnet登录到路由器中去配置环境启动路由器,每次都输入一遍命令太麻烦了,想着写一个shell脚本实现自动登录.配置环境.启动服务的过程. 脚本实现是使用expect来实现的,所以 ...

  3. Dockerfile 构建前端nginx应用并用shell脚本实现jenkins自动构建

    Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh********h.cn RUN rm -f /etc/nginx/nginx.conf COPY n ...

  4. php管理nginx虚拟主机shell脚本

    使用php作为shell脚本是一件很方便的事情.理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考 代码如下 复制代码 #!/usr/bin/php -q& ...

  5. Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务

    文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...

  6. Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx

    第一步,安装Tomcat 系统环境:Centos7 第1步:下载tomcat安装包 tomcat官网:https://tomcat.apache.org/ 第2步:安装包上传至linux中 第3步:下 ...

  7. nginx启停shell脚本

    #!/bin/bash # 编写 nginx 启动脚本 # 本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本 # 如果本脚本名为/etc/init.d ...

  8. 自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本

    这里面Shell的各个操作含义,可參考我三年前的这篇文章:http://blog.csdn.net/jadyer/article/details/7960802 #!/bin/sh APP_NAME= ...

  9. 一个客户端一键安装环境和服务的shell脚本

    #!/bin/bash basepath=$(cd `dirname $0`; pwd)SHELL_DIR="${basepath}/shell"PACKAGE_DIR=" ...

随机推荐

  1. FPM二:简单的APPLICATION-TABSTRIP(OIF)

    1.新建WDA程序ZLYFPM002 2.新建视图2,窗口2,并将视图2分配到窗口2. 3.继承UIBB类IF_FPM_UI_BUILDING_BLOCK 4.创建WDA 应用程序: 5.创建WDA ...

  2. MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a raster layer

    MapServer Tutorial——MapServer7.2.1教程学习——第一节用例实践:Example1.5 Adding a  raster layer 一.前言 MapServer不仅支持 ...

  3. --save-dev --save 的区别

    --save 是发布会还在使用 --save-dev 是在开发中需要用到的 --save 依赖的文件在denpendencis下 --save-dev 依赖的文件都在dvedependencis下

  4. Java多线程之synchronized及其优化

    Synchronized和同步阻塞synchronized是jvm提供的同步和锁机制,与之对应的是jdk层面的J.U.C提供的基于AbstractQueuedSynchronizer的并发组件.syn ...

  5. apm固定翼调试方法

    APM飞控传说是大神的神器新手的噩梦,APM是个便宜又好用的飞控~刚开始给我的天行者X5按APM飞控的时候也查询搜索了很多,参数值,修改和混控和混控量的修改翻遍了资料发现咱们论坛教程比较少,所以开帖总 ...

  6. 中国地图插件世界地图||jQuery矢量SVG地图插件JVectorMap

    中国地图插件|jQuery矢量SVG地图插件JVectorMap https://www.html5tricks.com/jquery-china-map.html 世界地图: https://www ...

  7. mysql Navicat客户端

    Navicat是一个用来操作多种数据库的客户端. 可应用操作系统:Windows.macOS.Linux. 可应用 Navicat 产品:Navicat for MySQL.Navicat for P ...

  8. 举例跟踪linux内核系统调用

    学号351+ 原创作品转载请注明出处 + 中科大孟宁老师的linux操作系统分析: https://github.com/mengning/linuxkernel/ 实验要求: 编译内核5.0 qem ...

  9. C#连接Access数据库

    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=XX/XXX ...

  10. Python 的第一个小程序

    F盘   新建文本文档 hello.txt 内容为: print("hello world! hello 2018!"); 打开CMD cd c:\                 ...