Grep

執行 from 腳本和直接執行時的“ps -ef”命令問題

  • May 18, 2021

如果我單獨執行這個命令,我得到 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' abc@abc.com <<END
Hi Support Team,

Kafka is down on trn server $(hostname) .Please take immediate action

Regards,
Application Support Team
END
fi

您的腳本被呼叫kafkamonitoring.sh,其中包括字元串kafka。腳本的名稱將出現在ps輸出中。這佔了額外的比賽之一。

您在ps命令替換中執行命令的事實將使腳本名稱的另一個實例出現在ps輸出中。這解釋了另一場額外的比賽。

pkill使用和/或pgrep在我對您之前的問題的回答中提到的(您已經合併了很多材料)將更好地為您服務:從 shell 腳本中檢測正在執行的程序的問題 例如,如果程序被精確呼叫kafka,那麼pgrep -x kafka將匹配正是那個命令。您還可以使用 指定特定使用者-u

引用自:https://unix.stackexchange.com/questions/650193