有没有办法,除了使用计数器启用基于时间的警报

时间:2015-04-16 23:10:09

标签: shell

假设ps -ef | grep apache | wc -l给出输出2,这意味着正在运行2个进程。

在我的服务器连接中波动,所以我想在ps -ef| grep apache |wc -l的输出超过5分钟时发送警报。

1 个答案:

答案 0 :(得分:0)

  

我想在输出ps -ef |时发送警报grep apache | wc -l为零超过5分钟。

首先,ps -ef| grep apache可能不可靠,因为它可能会将grep apache视为apache进程。为避免这种情况,请使用ps -ef | grep '[a]pache'。更好,尝试:pgrep apache。此外,如果我们正在寻找零或非零流程,我们不需要wc -l

如果您的需求很简单,那么这是一个简单的bash脚本,它会检查每一分钟是否正在运行apache进程。如果五个连续的测试显示没有这样的过程,它会向用户@ admin发送一封电子邮件:

#!/bin/bash
count=0
while sleep 1m
do
        if pgrep apache >/dev/null
        then
                count=0
        else
                ((count++))
        fi
        if [ "$count" -ge 5 ]
        then
                echo "Houston, we have a problem: $count" | mail admin@host
                count=0
        fi
done

由于这只会检查每一分钟,因此可能会错过一些在不到一分钟内启动和停止的过程。您可能需要调整时间。正如Jonathan Leffler评论的那样,做好这件事是一项艰苦的工作。此脚本仅用作快速简单的解决方案。