스크립트:
#!/bin/bash
kafka=`ps -ef | grep 'kafka' | grep -v grep | wc -l`
echo $kafka
if [ $kafka<3 ]
then
echo "Hi Support Team,
Kafka is down on QA/Dev server $hostname .Please take immediate action
Regards,
Application Support Team"| mailx -s "Kafka down on QA/Dev server" [email protected]
fi
산출:
-bash-4.2$ ./mail.sh
2
./mail.sh: line 4: 3: No such file or directory
답변1
따옴표가 없는 <
연산자는 셸의 리디렉션 연산자입니다. 이 오류는 셸이 이라는 파일에서 리디렉션을 시도하고 있음을 나타냅니다 3
. 두 정수를 비교 하는 데 이를 사용하고 싶을 가능성이 높습니다 -lt
.
대체 구현은 다음과 같습니다.
#!/bin/sh
if ! pkill -0 kafka; then
mail -s 'Kafka down on QA/Dev server' [email protected] <<END
Hi Support Team,
Kafka is down on QA/Dev server $hostname.
Please take immediate action
Regards,
Application Support Team
END
fi
pkill
위의 스크립트는 각 프로세스에 "제로 신호"를 보내는 데 사용됩니다 kafka
( 명령 이름뿐만 아니라 pkill -0 -f kafka
전체 명령줄에서 하위 문자열을 검색하는 데 사용됨). kafka
그러한 프로세스가 없으면 pkill
0이 아닌 종료 상태로 종료되어 이메일 전송이 트리거됩니다. "제로 신호"는 프로세스가 존재하고 프로세스에 아무런 영향을 미치지 않는지 테스트하는 데 사용됩니다.
또는 프로세스 수를 계산 kafka
하고 3개 미만일 때 이메일을 트리거하려면 다음을 수행하세요.
#!/bin/sh
if [ "$( pgrep kafka | wc -l )" -lt 3 ]; then
mail -s 'Kafka down on QA/Dev server' [email protected] <<END
Hi Support Team,
Kafka is down on QA/Dev server $hostname.
Please take immediate action
Regards,
Application Support Team
END
fi
이 pgrep
호출은 주어진 패턴과 일치하는 모든 프로세스 이름의 프로세스 ID를 한 줄에 하나씩 인쇄합니다. 명령 이름뿐만 아니라 전체 명령줄에서 하위 문자열을 pgrep -f kafka
검색하는 데 사용됩니다 .kafka
위의 두 스크립트 모두 변수가 hostname
설정되어 스크립트 외부로 내보내졌다고 가정합니다. $(hostname)
를 사용하여 여기에 설명된 유틸리티를 $hostname
호출 할 수 있습니다 .hostname