Bash 获取 运行 进程计数并在超过特定阈值时发送电子邮件的脚本

Bash Script that gets a count of running processes and then emails if over a certain threshold

我正在尝试创建一个脚本来获取 运行 进程的当前数量,如果该数量超过 1000,则给我发送电子邮件。我正在尝试在 bash 脚本中执行此操作,我将只使用 cron 作业来调用它。我正在使用的代码在下面,我确定我只是有一些不合适的地方,只需要另一双眼睛。

PCOUNT=$(cat /proc/loadavg|awk '{print }'|awk -F/ '{print }')
if [$PCOUNT > 100]; then
    mail -s "Process Count" email@example.com
fi

您的 if 陈述中的上下文不正确。在您的 if 上尝试使用 (( )) 而不是 [],如下所示:

PCOUNT=$(cat /proc/loadavg|awk '{print }'|awk -F/ '{print }')
if (( $PCOUNT > 100 )); then
    mail -s "Process Count" email@example.com
fi

注意:我的系统上没有 mail 设置,所以我无法验证 mail 命令。

  • 你可以将 awk 减少到

    awk -F" |/" '{print $5}' /proc/loadavg

  • 如果条件

    [$PCOUNT -ge 1000

  • 邮件,传递 $PCOUNT

    邮件-s "Process Count: $PCOUNT"

恕我直言,如果这是为了提醒你为什么不试试 nagios 插件

经过反复试验,我终于找到了解决办法。我最终获取了 awk 语句的输出并将其写入文件。然后我 cat 文件并将输出发送到邮件。

PCOUNT=$(awk -F" |/" '{print }' /proc/loadavg)
if ((PCOUNT>1000)); then
    echo "Number of Running Processes is" $PCOUNT >>/tmp/mail.txt
    cat /tmp/mail.txt | mail -s "Number of processes is rising" example@email.com
fi