Prometheus와 Grafana로 서버를 모니터링하고 있는데
서버가 죽을 때마다 따로 알림을 못 받는 게 계속 마음에 걸렸다.
이참에 서버들을 쭉 설정하면서 글을 남겨본다.
처음엔 sendmail같은 걸 생각해봤는데 sendmail을 막는 곳이 생각보다 많아서 어쩔 수 없이 gmail을 이용하기로 했다.
python과 gmail을 통해 메일을 보낼 것이다.
먼저 google 계정에 2단계 인증(2FA)을 받은 후 앱 비밀번호를 발급해야 한다. [구글]
앱 비밀번호를 발급한 후에는 다음과 같이 파이썬 스크립트를 작성한다.
google 계정과 앱 비밀번호, 메일 제목과 내용을 알아서 바꿔주자.
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart class BootSMTP: SENDER_ADDRESS = "DUMMY@MAIL.COM" RECEIVER_ADDRESS = "YOUR@MAIL.COM" MAIL_PASSWORD = "GOOGLEaPPpASSWORD" SMTP_SERVER = "smtp.gmail.com" SMTP_PORT = 465 @classmethod def send_mail(cls, subject, text): message = MIMEMultipart("alternative") message["Subject"] = subject message["From"] = cls.SENDER_ADDRESS message["To"] = cls.RECEIVER_ADDRESS part1 = MIMEText(text, "plain") part2 = MIMEText(f"<html><body><p>{text}</p></body></html>", "html") message.attach(part1) message.attach(part2) with smtplib.SMTP_SSL(cls.SMTP_SERVER, cls.SMTP_PORT) as server: server.login(cls.RECEIVER_ADDRESS, cls.MAIL_PASSWORD) server.sendmail(cls.SENDER_ADDRESS, cls.RECEIVER_ADDRESS, message.as_string()) subject = "MAIL SUBJECT" text = "MAIL TEXT" BootSMTP.send_mail(subject, text)
위 코드를 파이썬으로 실행하면 메일이 잘 전송된다.
(참고로 SMTP 특성 상 잘 전송됐는지 확인할 수 있는 방법은 없다)
이제 OS에 맞게 부팅 시 스크립트를 실행하도록 해주면 된다.
crontab이 안 깔려있는 리눅스 배포판은 없을 테니 가장 간편한 방법은 crontab일 듯 하다.
crontab -e를 통해 crontab을 연 후 다음과 같이 수정한다.
물론 파이썬과 스크립트 경로를 적절히 수정해주면 된다.
@reboot /usr/bin/python3 /home/hooni/bootmail/bootmail.sh
참고로 gmail에서 SMTP로 gmail에 메일을 보내면 메일 포워딩이 되지 않는다.
불편하지만 필자는 메일 포워딩 없이 바로 메일을 받아 사용하고 있다.
언젠가 포워딩이 필요하게 된다면 글을 더 달아두려 한다.