为什么我的流程计数脚本会出现误报?

ero*_*ppa 2 unix linux bash shell scripting

我有以下bash脚本,它列出了httpd进程的当前数量,如果它超过60,它应该给我发电子邮件.这种方式有80%的时间可以工作,但由于某些原因,有时它会在不超过60时通过电子邮件发送给我.任何想法?

#!/bin/bash
lines=`ps -ef|grep httpd| wc -l`
if [ "$lines" -gt "60" ]
then
        mailx -s "Over 60 httpd processes" me@me.com < /dev/null
fi
Run Code Online (Sandbox Code Playgroud)

Alo*_*hal 5

  1. 检查和发送电子邮件之间存在延迟.在那个时候,某些httpd进程可能会完成或启动,或两者兼而有之.因此,进程的数量可以不同.
  2. 您将grep流程包含在流程中(大多数情况下,可能会psgrep启动之前完成).避免这种情况的一种简单方法是将命令更改为ps -ef | grep [h]ttpd.这将确保grep不匹配grep [h]ttpd.
  3. 在Linux上,你有pgrep,这可能更适合你的目的.
  4. grep ... | wc -l通常可以替换为grep -c ....
  5. 如果要限制httpd请求的数量,我相信您可以在apache配置文件中设置它.