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. java知识随笔

    Servlet: void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); vo ...

  2. Layui追加合计

    parseData: function(res) { //将原始数据解析成table组件所规定的数据 admin.restest(res); var list = new Array(); var t ...

  3. laravel清缓存,flex简单使用

    关于laravel 删除视图缓存:php artisan view:clear 清除运行缓存:php artisan cache:clear 清除配置缓存:php artisan config:cle ...

  4. 使用有序GUID:提升其在各数据库中作为主键时的性能

    原文出处:https://www.codeproject.com/articles/388157/guids-as-fast-primary-keys-under-multiple-database  ...

  5. 微信内嵌浏览器打开手机浏览器下载APP(APK)的方法

    想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数 ...

  6. java多线程高并发知识总结

    1.      计算机系统 使用高速缓存来作为内存与处理器之间的缓冲,将运算需要用到的数据复制到缓存中,让计算能快速进行:当运算结束后再从缓存同步回内存之中,这样处理器就无需等待缓慢的内存读写了. 缓 ...

  7. 封装一个redis操作类来操作hash格式

    最近项目要用redis,依然是基于tp3.2. 发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个 目前只支持hash格式,其他数据类型的操作后面用到的时候再补充 <?php / ...

  8. http短连接与长连接简介

    1.HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问题 ...

  9. 整数中x出现的次数

    求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer ...

  10. APP压力稳定性测试之monkey环境搭建

    一.搭建adb环境: 需要的安装软件包可以使用我分享的,链接:https://pan.baidu.com/s/13DThDtc0GALabTakshcLfg 密码:0kuo:也可以自己百度下载 1)下 ...