执行 from 脚本时发出“ps -ef”命令并直接执行

执行 from 脚本时发出“ps -ef”命令并直接执行

如果我单独执行这个命令,我会得到 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

相关内容