基于这个情形,我之前写了个监控shell脚本的办理方案,不管以上涌现那种情形,都自动规复Nginx的做事.该脚本在生产环境上运行正常。
几种常用web做事器比拟
#!/bin/bash # filename: webservermonitor.sh # Function:监控 nginx 的 php-cgi 是否正常 # Author:huangweibo # Run: nohup ./webservermonitor.sh & # # php-cgi 监听的IP和端口 V_PHP_CGI_PORT=\"大众xx.xx.xx.xx:9000 xx.xx.xx.xx: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 10done
PS:实在大家写shell脚本的时候并不用一定要去记住那些语法,紧张是根据你的需求处理好判断逻辑,我一贯认为写脚本实际上便是把逻辑写出来,至于语法那些,忘了百度下就好了,当然基本的语法还是要会的。
后面会分享更多关于devops和DBA内容,感兴趣的朋友可以关注下!
!