Grep
執行 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' 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
。