我已经写了以下脚本
#! /bin/bash
function checkIt()
{
ps auxw | grep $1 | grep -v grep > /dev/null
if [ $? != 0 ]
then
echo $1"bad";
else
echo $1"good";
fi;
}
checkIt "nginx";
checkIt "mysql";
checkIt "php5-fpm";
这里的问题似乎是最后一次检查checkIt "php5-fpm"
,该检查始终返回php5-fpmbad。由于连字符,问题似乎出现了。如果我只是checkIt "php5"
,我会得到预期的结果。我实际上可以逃脱它,因为我没有任何以PHP5开头或包含PHP5的其他过程。但是,它变成了一个黑客,有一天会抬起丑陋的头部。我对可能能够告诉我如何获得检查" php5-fpm"的任何人都非常感谢。
检查服务是否在 *nix中运行的正常方法是通过执行此操作:
/etc/init.d/servicename status
,例如
/etc/init.d/mysqls status
这些脚本通过PID检查状态而不是Grepping PS输出。
添加单词边界和负面 lookahead regex
到您的 grep
:
#!/bin/bash
function checkIt()
{
ps auxw | grep -P 'b'$1'(?!-)b' >/dev/null
if [ $? != 0 ]
then
echo $1"bad";
else
echo $1"good";
fi;
}
checkIt "nginx"
checkIt "mysql"
checkIt "php5-fpm"