나는 bash 스크립트(Python이 두 번째로 좋음)를 사용하여 내 메일 서버가 온라인이고 실행 중인지 정기적으로(매시간) 모니터링하고 싶습니다.
이 작업을 위한 전용 솔루션(Nagios, ...)이 있다는 것을 알고 있지만 cronjob으로 사용할 수 있는 간단한 것이 정말로 필요합니다. 메일서버만 살아 있는 것을 볼 수 있습니다.
나는 텔넷을 통해 메일 서버와 통신하는 방법을 알고 있습니다. 즉:
telnet mail.foo.org 25
EHLO example.com
mail from:
rcpt to:
...
그러나 그것은 대화형입니다. 메일 서버가 통신하고 있는지 확인하기 위해 스크립트를 사용할 수 있습니까? 분명히, 나는 모든 것을 이메일로 보내고 싶지 않습니다. 메일 서버가 응답하는지 테스트하고 싶습니다.
답변1
nc
다음과 같이 SMTP 메일 서버를 테스트 할 수 있습니다 .
$ nc -w 5 mail.mydom.com 25 << EOF
HELO mail.mydom.com
QUIT
EOF
노트:이 옵션은 최대 5초 동안 기다리도록 -w 5
지시합니다 . nc
모니터링할 서버는 mail.mydom.com
우리가 25
연결하려는 포트입니다.
서버에 다음과 같은 문제가 있는 경우 위 양식을 사용할 수도 있습니다 HELO
.
$ echo "QUIT" | nc -w 5 mail.mydom.com 25
노트:이 양식은 Postfix 및 Sendmail에서 작동합니다!
예
메일 서버에 연결 중입니다.
$ echo "QUIT" | nc -w 5 mail.bubba.net 25
220 bubba.net ESMTP Sendmail 8.14.3/8.14.3; Sat, 19 Apr 2014 16:31:44 -0400
221 2.0.0 bubba.net closing connection
$
이 작업에서 반환된 상태를 확인하는 경우:
$ echo $?
0
그러나 상대방이 우리의 연결을 받아들이는 것이 없다면:
$ echo QUIT | nc -w5 localhost 25
Ncat: Connection refused.
$
다음에서 반환된 상태를 확인하세요.
$ echo $?
1
함께 넣어
이것은 내 버전의 스크립트입니다 mail_chkr.bash
.
#!/bin/bash
echo "Checking Mail Server #1"
echo "QUIT" | nc -w 5 mail.bubba.net 25 > /dev/null 2>&1
if [ $? == 0 ]; then
echo "mail server #1 is UP"
else
echo "mail server #1 is DOWN"
fi
echo "Checking Mail Server #2"
echo "QUIT" | nc -w 5 localhost 25 > /dev/null 2>&1
if [ $? == 0 ]; then
echo "mail server #2 is UP"
else
echo "mail server #2 is DOWN"
fi
실행하세요:
$ ./mail_chkr.bash
Checking Mail Server #1
mail server #1 is UP
Checking Mail Server #2
Ncat: Connection refused.
mail server #2 is DOWN