监测NGINX服务的shell脚本
Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了。
偶尔会出现以下情况的:php-cgi 进程突然消失了,造成PHP脚本无法访问;更不可思议的是明明是php-cgi 打开有两个端口在监听的,莫名其秒的突然有一个php-cgi 的端口被关闭了,造成所有请求全积在一个端口上,
结果造成PHP脚本访问异常。
基本这种情况,我写了个监控shell脚本的解决方案,不管以上出现那种情况,都自动恢复Nginx的服务.该脚本在生产环境上运行正常:
- #!/bin/bash
- #
- # filename: webservermonitor.sh
- # 功能:监控 nginx 的 php-cgi 是否正常
- # 运行: 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
监测NGINX服务的shell脚本的更多相关文章
- 监控Nginx服务的Shell脚本
Nginx 虽然处理并发量比 apache 确实要强点,但它这种 php-cgi 模式不是太稳定,这点网上也有朋友总结了,我在实现项目中也感受到了. 我们一台支付机,偶尔会出现以下情况的:php-cg ...
- telnet登录路由器启动服务的shell脚本
因为在测试中经常要telnet登录到路由器中去配置环境启动路由器,每次都输入一遍命令太麻烦了,想着写一个shell脚本实现自动登录.配置环境.启动服务的过程. 脚本实现是使用expect来实现的,所以 ...
- Dockerfile 构建前端nginx应用并用shell脚本实现jenkins自动构建
Dockerfile 文件构建docker镜像 FROM centos MAINTAINER zh********h.cn RUN rm -f /etc/nginx/nginx.conf COPY n ...
- php管理nginx虚拟主机shell脚本
使用php作为shell脚本是一件很方便的事情.理所当然,我们可以使用php脚本来管理 nginx虚拟主机,下面是笔者的 脚本 文件供各位参考 代码如下 复制代码 #!/usr/bin/php -q& ...
- Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务
文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...
- Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx
第一步,安装Tomcat 系统环境:Centos7 第1步:下载tomcat安装包 tomcat官网:https://tomcat.apache.org/ 第2步:安装包上传至linux中 第3步:下 ...
- nginx启停shell脚本
#!/bin/bash # 编写 nginx 启动脚本 # 本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本 # 如果本脚本名为/etc/init.d ...
- 自己主动下载源代码_并编译_打包_部署_重新启动服务的Shell脚本
这里面Shell的各个操作含义,可參考我三年前的这篇文章:http://blog.csdn.net/jadyer/article/details/7960802 #!/bin/sh APP_NAME= ...
- 一个客户端一键安装环境和服务的shell脚本
#!/bin/bash basepath=$(cd `dirname $0`; pwd)SHELL_DIR="${basepath}/shell"PACKAGE_DIR=" ...
随机推荐
- 小T牛 绿色版 18.08.0100
百度网盘 链接:https://pan.baidu.com/s/1g2PIMBR8YAdz5skH5ogFhw 密码:3o4k 小T牛 小T牛 绿色版 18.08.0100 意见反馈:qq(邮箱):6 ...
- round函数解决oracle报错"OCI-22053: 溢出错误"的问题
继上次公司网站报错除数为0的问题,这次又来报错溢出错误,还是同一条语句!搜索网上的解决方法,发现问题描述和解决方法如下: Oracle 数值数据类型最多可存储 38 个字节的精度.当将 Oracle ...
- FileSystemObject对象及常用方法
FSO 对象模式包含在 Scripting 类型库中,该库位于 Scrrun.dll 文件中.因而,要使用 FSO 对象模式,必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中. 要用 ...
- js 实现异步上传图片+预览
两种js实现方式,一种用原生的ajax:另一种用JQuery,例子比较简单,直接上代码. <!DOCTYPE html> <html> <head> <tit ...
- MATLAB绘图hist
刚登上号,已经学了一半了,就从现在开始写吧 以前学过的东西老忘,所以就注册个账号就当做记笔记吧 MATLAB在原来的数组中增加新行 A=[A;B]%B是要增加的行: hist使用方法 y=4*rand ...
- ntopng网络流量实时监控
ntopng is the next generation version of the original ntop, a network traffic probe that monitors ne ...
- 初次接触Java
今天初次接触Eclipse,学着用他来建立java工程,话不多说,来看看今天的成果! 熟悉自己手中的开发工具,热热身 刚上手别慌,有问题找度娘 刚刚拿到这个软件的安装包我是一脸懵逼的,因为是从官网下载 ...
- tensorflow estimator API小栗子
TensorFlow的高级机器学习API(tf.estimator)可以轻松配置,训练和评估各种机器学习模型. 在本教程中,您将使用tf.estimator构建一个神经网络分类器,并在Iris数据集上 ...
- powershell脚本:你的文件已经被黑客篡改.ps1
本人原创powershell脚本分享. 脚本用途:列出某目录下,所有软件签名不符的文件. 系统需求: win7 + powershell 2.0 及 以上. #nd你的文件已经被黑客篡改.ps1 ps ...
- Python字典的使用与处理
在Python中,字典{dict}是比较常用的一个数据类型,使用键-值(key-value)存储 与列表[list]相比,字典具有极快的查找和插入速度,不会随着key-value的增加而变慢,但是相应 ...