加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

shell 练习(13) —— 监控 httpd 进程数是否异常

发布时间:2020-12-15 23:08:12 所属栏目:安全 来源:网络整理
导读:1. 题目 在服务器上,写一个监控脚本,要求如下: 1)每隔 10s 去检测一次服务器上的 httpd 进程数,如果大于等于 500 的时候,就需要自动重启一次 apache 服务,并且检测启动是否成功。 2)若没有正常启动还需再一次启动,最大不成功数超过5次则需立即发送
1. 题目

在服务器上,写一个监控脚本,要求如下:

1)每隔 10s 去检测一次服务器上的 httpd 进程数,如果大于等于 500 的时候,就需要自动重启一次 apache 服务,并且检测启动是否成功。

2)若没有正常启动还需再一次启动,最大不成功数超过5次则需立即发送邮件通知管理员,并且以后不再检测!

3)如果启动成功后,1分钟后再次检测 httpd 进程数,若正常则重复之前操作(每隔 10s 检测一次),若还是大于等于 500,那放弃重启并需要发送邮件给管理员,然后自动退出该脚本。假设其中发送邮件的脚本是mail.py。

发送邮件的操作,可以参考我的这篇文章,请点击这里.

2. 分析

1)每隔 10s 检测一次,用死循环 while 实现;

2)检测 httpd 进程数,用 pgrep -l httpd | wc -l 统计;如果大于等于 500 则重启用 /usr/local/apache2/bin/apachectl restart 。

3)重启是否成功,可以用 pgrep 再统计一次进程数,或者用 echo $? 是否为 0 判断。如果确认重启成功则 1 分钟后再重新统计 pgrep 数。如果重启不成功,则至多再检测 5 次,5次之后仍然重启失败,则放弃检测。

4) 发邮件时,可以写上邮件题目和内容。

3. 脚本

#!/bin/bash

# 重复检测 apache 是否重启成功的函数:
check_service()
{
    n=0
    for i in $(seq 1 5);do
      /usr/local/apache2/bin/apachectl restart 2>/tmp/apache.err
      if [ $? -ne 0 ];then
        n=$[$n + 1]
      else
        break
      fi
    done
    if [ $n -eq 5 ];then
      #用发邮件的脚本发送邮件给管理员
      python mail.py "[email?protected]" "httpd service restart failed" "httpd process restart faild."
      exit
    fi       
}

while true:
do
  t_n=$(pgrep -l httpd | wc -l)
  if [ $t_n -ge 500 ];then
    /usr/local/apache2/bin/apachectl restart 2>/tmp/apache.err
    if [ $? -ne 0 ];then
      check_service
    fi
    sleep 60
    s_n=$(pgrep -l httpd | wc -l)
    if [ $s_n -ge 500 ];then
      python mail.py "[email?protected]" "httpd service has some wrong" "httpd process number is budy"
      exit
    fi
  fi
  sleep 10  
done

4. 解释

1)连续重启 5 次 apache 服务的脚本,单独放在 check_service() 函数。利用变量 n 来计数,每重启失败一次,n+1,哪怕有一次成功都会被 break 终止 for 循环跳出。如果最后 for 循环累加了 5 次,就发送邮件,并且通过 exit 退出脚本。

2)如果 apache 第1次就重启成功,或者通过 check_service 在5次之内重启成功,脚本都会等待60s 后,再进行检测。注意看脚本中的判断顺序。

3)脚本中除了用 pgrep -l httpd 来统计 httpd 进程数以外,还可以用 ps -C httpd --no-heading 来代替,作用一样。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读