为此奋斗...
for i in `cat services.txt`
do
if ! grep -q $i; then
echo " $i Is NOT Running"
else
echo " Checking $i on `hostname`..."
ps aux | grep -i $i | awk '{print $1, $11}'| cut -d' ' -f1-2| sort
echo -e " "
sleep 4
fi
done
该块刚刚挂起-我无法捕获grep的成功/失败
如果在services.txt中未找到字符串...脚本挂起...如果没有找到,grep希望跳过它
services.txt仅包含单个单词
谢谢!
您的脚本挂起的原因是因为命令grep -q $i
正在等待输入。您可以尝试在外壳中单独运行该命令,并验证其提示输入。
在if语句中将命令更改为ps aux | grep -i $i
可以解决您的问题。
注意:ps aux | grep -i $i
还将grep列为该过程之一。确保通过将其通过管道传递到另一个grep ps aux | grep -i $i | grep -v 'grep'
这是工作代码
checkservices() {
cat >$HOME/services.txt <<EOF
ganglia
hbase
hdfs
hive
hue
livy
mapred
test-missing-service
mysql
oozie
presto
spark
yarn
zeppelin
EOF
for i in `cat $HOME/services.txt`
do
if `ps -ef | grep ^$i | grep -v grep >/dev/null`
then
i=$(echo "$i" | awk '{print toupper($0)}')
echo "$i -- is running on `hostname`"
echo ""
sleep 2
else
i=$(echo "$i" | awk '{print tolower($0)}')
echo "$i -- IS NOT running on `hostname` error"
echo ""
fi
done
}