이 명령을 단독으로 실행하면 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
(여기서 많은 자료를 통합했습니다).쉘 스크립트에서 실행 중인 프로세스를 감지하는 데 문제가 있습니다. 예를 들어 프로세스가 정확하게 호출되면 명령이 정확하게 일치됩니다 kafka
. pgrep -x kafka
를 사용하여 특정 사용자를 지정할 수도 있습니다 -u
.