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. mac常用操作

    Command+Shift+. 可以显示隐藏文件.文件夹 touch a.txt 新建txt文件

  2. OO的奇妙冒险1

    OO的奇妙冒险 ~OOP入门与字符串处理~ 目录 总体分析 作业内容分析 作业内容总结 互测的收获 公测互测bug分析与总结 不太正经的个人自嗨 总体分析 公测 中测(基础与进阶): 其实在我看来,从 ...

  3. ReactJS之遍历对象的方法

    const obj = { channel: “wevmvmklskdosll12k;0”, index:0 }; Object.keys(obj).map(key => console.log ...

  4. 简易OA漫谈之工作流设计(一个Demo),完成6年前的一个贴子

    6年前在腾讯做OA,那时写了两篇心得. https://www.cnblogs.com/wangxiaohuo/archive/2012/08/22/2650893.html https://www. ...

  5. D3DX 9.9 LEARNERNOTO

    DirectX 9.0 3D游戏开发编程基础一.开发工具:vs2013 or VC++2005 Direct3D API http://msdn.microsoft.com/directx/sdk D ...

  6. python - 初识面向对象

    1.初识面向对象       面向过程:一切以事务的发展流程为中心           优点:负责的问题流程化,编写相对简单         缺点:可扩展性差,只能解决一个问题,改造也会很困难,牵一发 ...

  7. CentOS7+Win10双系统的CentOS7启动bug

    自从安装了CentOS7系统,它的启动时间常常要三分钟以上,实在忍不了. 以下是CentOS7系统的启动记录片断: May 18 13:04:05 DESKTOP-23V3CHU kernel: XF ...

  8. ereg

    int ereg ( string $pattern , string $string [, array &$regs ] ) Note: 使用 Perl 兼容正则表达式语法的 preg_ma ...

  9. 错误:Could not find a getter for CreatTime in class

    org.hibernate.PropertyNotFoundException: Could not find a getter for CreatTime in class org.com.xk.h ...

  10. Oracle提取中文字符串拼音首字母函数

    通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母. 效果1,获取拼音简码: 效果2,获取姓名首字母: 创建函数: /* 获取拼音简码函数 */ CREATE ...