2013-11-14 shell脚本练习题

回复 收藏
服务器上跑的是LNMP环境,近期总是有502现象。502为网站访问的状态码,200正常,502错误是nginx最为普通的错误状态码。由于502只是暂时的,并且只要一重启php-fpm服务则502消失,但不重启的话,则会一直持续很长时间。所以有必要写一个监控脚本,监控访问日志的状态码,一旦发生502,则自动重启一下php-fpm。

我们设定:
1. access_log  /data1/log/access.log
2. 脚本死循环,每10s检测一次
3. 重启php-fpm的方法是  /etc/init.d/php-fpm restart

参考脚本:
{{{密码回复可见}}}
2013-11-14 12:15 举报
已邀请:
0

chekir

赞同来自:

学习!
0

good

赞同来自:

看看
0

路过

赞同来自:

学习了
0

八滴眼泪

赞同来自:

#! /bin/bash
a=grep -q '502' /data1/log/access.log
while :; do;[ $a eq 502 ];do service /etc/init.d/php-fpm restart;sleep 10;done
0

ocean

赞同来自:

[root@OceanV sh]# cat check_php_fpm.sh
#!/bin/bash   
#
url="http://192.168.9.9/cacti/index.php"
PROG=/etc/init.d/php-fpm
LOG=/tmp/php-cgi.log     
#LOG=/data1/log/access_log   

while true
do
time=`date`   
status=$(curl -s --head "$url" | awk '/HTTP/ {print $2}')   
#status=`awk  -F\" '{print $3}' $LOG |cut -c -4`
if [ "$status" = "502" ]; then   
     echo "Restart php-cgi at ${time} " >> $LOG   
     $PROG restart   
               
fi
sleep 10
done
0

Budweiser小王子

赞同来自:

看答案
0

luzhen521

赞同来自:

0

轩鹏

赞同来自:

1
0

齐天大圣

赞同来自:

ddd
0

木字当头

赞同来自:

0

zyfeifie

赞同来自:

kakan
0

鸵鸟

赞同来自:

xx
0

huifeidexiaxia

赞同来自:

非常实用,多谢铭哥
0

nihao426181

赞同来自:

^^^^^^^^^^^^^^^^
0

王靖

赞同来自:

我看看看看看
0

aqi

赞同来自:

#!/bin/bash
data=
while :
dt=`date -d '-1 min' +%H%M`
do
data=`grep '$dt' /data1/log/access.log | grep '502' | wc -c`
if [ ! -z $data ];then
        /etc/init.d/php-fpm restart
        data=
fi
sleep 10
done
0

王肖强

赞同来自:

  1. #!/bin/bash
  2. # Monitor Nginx access status { 502}.
  3. # Writen by Wangxiaoqiang 2014.11.27.

  4. while true
  5.   do
  6.     grep '502' /data1/log/access.log > /dev/null
  7.     if [ $? -eq 0 ]
  8.       then
  9.           /etc/init.d/php-fpm restart
  10.     fi
  11.     sleep 10
  12. done
0

王肖强

赞同来自:

本帖最后由 王肖强 于 2014-11-27 15:45 编辑
  1. #!/bin/bash
  2. # Monitor Nginx access status { 502}.
  3. # Writen by Wangxiaoqiang 2014.11.27.

  4. while true
  5.   do
  6.     grep '502' /data1/log/access.log > /dev/null
  7.     if [ $? -eq 0 ]
  8.       then
  9.           /etc/init.d/php-fpm restart > /dev/null
  10.     fi
  11.     sleep 10
  12. done
0

zq13054480665

赞同来自:

看看
0

huguihua2002

赞同来自:

学习
0

2422606568

赞同来自:

学习
0

yaabb163

赞同来自:

ddddddddddddddddddddddd
0

cmzsteven

赞同来自:

{:4_91:}
0

wuhen

赞同来自:

本帖最后由 wuhen 于 2015-2-25 14:59 编辑
  1. #!/bin/bash
  2. log=/data1/log/access.log
  3. while :;
  4. do
  5. grep -q '502' $log
  6. if [ $? -eq 0 ]
  7. then
  8. /etc/init.d/php-fpm restart >/dev/null
  9. else
  10. exit 0
  11. fi
  12. done
  1. #!/bin/bash
  2. log=/data1/log/access.log
  3. while :;
  4. do
  5. grep -q '502' $log
  6. if [ $? -eq 0 ]
  7. then
  8. /etc/init.d/php-fpm restart >/dev/null
  9. fi
  10. sleep 10
  11. done
第一个加入到计划周期任务中每10秒执行,第二个自己会每10秒执行

0

GAARA

赞同来自:

{:4_109:}
0

zhangw

赞同来自:

q
0

dantes

赞同来自:

有点缺憾
#!/bin/bish
while : ;
do
awk  '{ print $6 }'  /tmp/access.log  |cut  -b  -3  |grep  502
if  [ $? -eq 0 ]
then
touch  1.txt >/dev/dull
else
/etc/init.d/php-fpm  restart > echo  reboot.txt
sed  -i “s/502/555/g”  /tmp/access.log
fi
sleep 10
done
0

hangtiangazi

赞同来自:

顶。。。
0

pykihwfn

赞同来自:

回复
0

So Long

赞同来自:

cankaoxia
0

疾风

赞同来自:

看看做什么判断
0

ztonglinyx

赞同来自:

{:4_91:} 看看看
0

qq20847697

赞同来自:

#!/bin/bash
while :;do
if cat /data1/log/access.log |grep -q 502 ; then
  /etc/init.d/php-fpm restart &>/dev/null
fi
sleep 10
done
0

sss

赞同来自:

本帖最后由 sss 于 2015-6-1 14:44 编辑
  1. #!/bin/bash
  2. #Nginx Log inspection
  3. #502 error More than 5 to restart php-fpm

  4. log=/data1/log/access.log
  5. n=5
  6. while :
  7. do
  8.         tail -n 100 $log > /tmp/log
  9.         N_502=`grep -c '502' /tmp/log`
  10.         if [ $N_502 -ge $n ]
  11.         then   
  12.                 /etc/init.d/php-fpm restart >/dev/null 2>&1
  13.                 sleep 10
  14.         fi
  15.         sleep 10
  16. done





0

cisco12355074

赞同来自:

{:4_107:}学习一下,谢谢
0

苏苏苏苏

赞同来自:

支持阿铭111
0

一岁拽起

赞同来自:

看看老师写的
0

andreking

赞同来自:

学习下
0

丶小作

赞同来自:

......
0

iwannachange

赞同来自:

1
0

鑫柏

赞同来自:

学习
0

剑在飞

赞同来自:

{:4_91:}{:4_91:}{:4_91:}
0

oldorab

赞同来自:

复习
0

哈哈琨少

赞同来自:

学习学习
0

307141950

赞同来自:

kankan
0

tjlygdx

赞同来自:

查看
0

liang1990

赞同来自:

a=`grep  '200'  /data1/log/access.log |wc -l` while : ; b=`grep  '200'  /data1/log/access.log |wc -l`   if [ $b -lt $a ];then      a=$b      /etc/init.d/php-fpm restart   fi      sleep 10000 done
0

放牛

赞同来自:

{:7_173:}
0

汤小东

赞同来自:

check
0

翟厚翔

赞同来自:

while : do if [ grep -p '502'  /data1/log/access.log ]      /etc/init.d/php-fpm restart > /dev/null 2>/dev/null           n=ps-ef|grep -p -v 'php-fpm       if [ $n -eq 0 ]           /etc/init.d/php-fpm restart > /dev/null 2>/data1/log/php_start.err           else               mail -s "php-fpm restart error" 1357970430@qq.com  < /data1/log/php_start.err            fi fi sleep 10 done
0

Rohero

赞同来自:

学习
0

ldp840611

赞同来自:

看看
0

qin521ne

赞同来自:

xuexi
0

石头

赞同来自:

{:4_91:}
0

出VU时代

赞同来自:

看一下
0

hlymlv

赞同来自:

看看
0

maria

赞同来自:

  1. #!/bin/bash

  2. while :
  3. do
  4.     tail -n1 /home/wwwlogs/bbs.maria.com-access_log >./log
  5.     ztm=` awk '{print $9}' ./log`
  6.     if [ $ztm -eq '502' ]
  7.     then
  8.         /etc/init.d/php-fpm restart
  9.     fi
  10.     sleep 10
  11. done
0

malong

赞同来自:

学习一下
0

ringle000

赞同来自:

学习
0

何朝晖

赞同来自:

学习下
0

何朝晖

赞同来自:

虚席
0

licengceng

赞同来自:

学习
0

qiqige

赞同来自:

学习
0

t0ny1988

赞同来自:

#!/bin/bash
while :
do
err=`cat /usr/local/apache2/logs/access_log |awk {'print $9'} |grep 502|wc -l`
if [ $err != 0 ]
then
  /etc/init.d/php-fpm restart
else
exit 0
fi
sleep 10
done
0

xiaoqing757

赞同来自:

看看
0

chiang1213

赞同来自:

学习!
0

lin19890913

赞同来自:

看看
0

落涧飞鹰

赞同来自:

看看
0

jokerhuman

赞同来自:

学习
0

thedawn

赞同来自:

1
0

xteplinux

赞同来自:

{:4_91:}
0

我是学渣

赞同来自:

{:4_99:}
0

北辰星

赞同来自:

#!/bin/bash
while [ 1 ]
do
     a=`grep -q '502' /data1/log/access.log`
     if [ $a -eq 502 ]
     then
              /etc/init.d/php-fpm restart
     fi
     >/data1/log/access.log
     sleep 10
done
0

HwangChen

赞同来自:

look
0

lin13750529011

赞同来自:

谢谢
0

bbcw

赞同来自:

#!/bin/bash
while :
do
    if head /data1/log/access.log|grep '501';then
        /etc/init.d/php-fpm restart
    fi
sleep 10
done
0

435664265

赞同来自:

看看
0

369666951

赞同来自:

if判断怎么做
0

sy0258

赞同来自:

学习
0

乐橙306

赞同来自:

1
0

大仔黑黑

赞同来自:

111111111
0

木头爱木头媳妇

赞同来自:

1
0

超大大

赞同来自:

参考 学习
0

branttsai

赞同来自:

study,tks
0

xzzlamp

赞同来自:

11
0

mind_sky

赞同来自:

学习
0

alvinnull

赞同来自:

xuexi
0

guoyanyan

赞同来自:

xuexi
0

luckytodd

赞同来自:

/bin/bash
if grep -q "502" /data1/log/access.log
then
>/data1/log/access.log
/etc/init.d/php-fpm restart
fi
while :
   do
   sleep 10
   /bin/bash /usr/local/sbin/0519/check502.sh
done
0

CNS2016

赞同来自:

学习!
0

小猫咪

赞同来自:

{:4_91:}
0

星空的衣角

赞同来自:

学习
0

旅行

赞同来自:

不说看答案,也不说学习,瞄哈题尾。
0

zxc123

赞同来自:

学习
0

cj2017

赞同来自:

本帖最后由 cj2017 于 2016-7-6 17:33 编辑

....
0

beafty

赞同来自:

学习
0

kevinjin

赞同来自:

#! /bin/bash
while [ -n `cat /data1/log/access.log |grep '502'` ]
do
    /etc/init.d/php-fpm restart
    sleep 10
done
0

a1138665328

赞同来自:

kankan
0

吴天瑞

赞同来自:

学习
0

午夜DJ

赞同来自:

#! /bin/bash
while :;do
n=`tail -n1 /data1/log/access.log | awk '{print $}' `
if [ $n -eq 502 ]
  then
  /etc/init.d/php-fpm restart
fi
sleep 10
done

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: