このコマンドを単独で実行すると、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
出力に表示されます。これは追加の一致の1つを説明します。
コマンド置換でこのコマンドを実行すると、ps
スクリプト名の他のインスタンスがps
出力に表示されます。だから別の追加ゲームがあります。
pkill
前の質問に対する回答で述べた内容を使用すると、より良いサービスを受けることができますpgrep
(ここでは多くの資料を統合しました)。シェルスクリプトで実行されているプロセスを検出できません。 たとえば、プロセスが正しく呼び出されると、コマンドは正しく一致しますkafka
。pgrep -x kafka
を使用して特定のユーザーを指定することもできます-u
。