메일 서버 모니터링을 위한 간단한 스크립트

메일 서버 모니터링을 위한 간단한 스크립트

나는 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

관련 정보