如果我单独执行这个命令,我会得到 3,这实际上是正确的:
ps -ef | grep kafka | grep -v grep | wc -l
但是当放在脚本中时,我得到的结果是 5:
[mradmin@orionkafka-dt-t1 scripts]$ ./kafkamonitoring.sh
5
脚本是
if [[ $( ps -ef | grep kafka | grep -v grep | wc -l) -lt 3 ]]
then
echo $(ps -ef | grep kafka | grep -v grep | wc -l)
mail -s 'Kafka down on trn environment' [email protected] <<END
Hi Support Team,
Kafka is down on trn server $(hostname) .Please take immediate action
Regards,
Application Support Team
END
fi
答案1
您的脚本名为kafkamonitoring.sh
,其中包含字符串kafka
。脚本的名称将出现在ps
输出中。这解释了其中一个额外的匹配项。
事实上,您ps
在命令替换中运行该命令将使脚本名称的另一个实例出现在ps
输出中。这就是另一场额外比赛的原因。
pkill
通过使用和/或如我对您上一个问题的回答中提到的那样,您会得到更好的服务pgrep
(您已经从中纳入了很多材料):从 shell 脚本检测正在运行的进程时出现问题 例如,如果进程被调用正是kafka
,那么pgrep -x kafka
将完全匹配该命令。您还可以使用 指定特定用户-u
。