서버 쉘스크립트 내용을 메일로 쏴봅시다.
일단 시작에 앞서 저는 별도 구현해 놓은 smtp 서버가 없고 단발성 메일 전송만 하기 떄문에 msmtp 를 사용합니다.
아래와 같이 설치하면됩니다.
# Ubuntu/Debian 계열
sudo apt update
sudo apt install -y msmtp msmtp-mta
# CentOS/RHEL 계열
sudo yum install -y epel-release
sudo yum install -y msmtp
설치가 완료되었으면, 여기에 설정을 해주어야합니다
# 파일 생성 및 편집
nano ~/.msmtprc
아래와 같이 설정을 진행합니다.
비밀번호는 네이버나 gmail 을 사용할 때 사용하는 1차 비밀번호가 아니라,
STMP 앱 비밀번호입니다.
하단에 네이버 기준 앱 비밀번호 설정 및 확인방법 공유드리겠습니다.
우선 임시로 아래와 같이 설정합시다.
# 기본 계정 설정
account default
host smtp.naver.com
port 587
auth on
user 전송할 이메일 계정 # 본인 네이버 메일 계정
password 비밀번호 # 앱 비밀번호(2단계 인증 시 필요)
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

그리고 이 파일은 보안때문에
600 권한을 가져갸아합니다. 소유자 (rw) 권한
chmod 600 ~/.msmtprc
완료하였으면 이제 네이버 메일로 보낼겁니다
네이버에 로그인을 해주고, 톱니바퀴(설정)으로 들어가줍니다.

하단에 보안 설정을 눌러주시고

2단계 인증 부분에 '관리' 버튼을 눌러줍니다.

아웃룩을 눌러주고, 비밀번호 생성하기 버튼을 눌러주면 아래 비밀번호가 생성되는데요
이 비밀번호를 아까 msmtprc 파일에 넣어주면 됩니다.
그러면 설정은 완료됩니다.

편의상 저는 제가 짠 스크립트 간단한 nginx 로그들에 대해서 메일로 전송되도록 짰고,
해당 부분은 crontab 을 이용해서, 지속적으로 오게 설정도 가능하나,
우선 테스트로 전송이 잘 되나 해보면 될듯합니다!
#!/usr/bin/env bash
# 최소 버전: Nginx 로그 요약 → 메일(또는 stdout)
# 사용: ./nginx-daily.sh -f /var/log/nginx/access.log -t you@example.com
# 크론: 0 8 * * * /path/nginx-daily.sh -f /var/log/nginx/access.log -t you@example.com
set -euo pipefail
LOG_FILE="/var/log/nginx/access.log"
TO=""
SUBJECT="Nginx Daily Report - $(date +'%Y-%m-%d')"
while [[ $# -gt 0 ]]; do
case "$1" in
-f|--file) LOG_FILE="$2"; shift 2;;
-t|--to) TO="$2"; shift 2;;
-s|--subject) SUBJECT="$2"; shift 2;;
*) echo "[!] unknown arg: $1" >&2; exit 2;;
esac
done
[[ -r "$LOG_FILE" ]] || { echo "[!] cannot read $LOG_FILE" >&2; exit 1; }
# ---- 보고서 생성 (stdout) ----
{
echo "=== Nginx Daily Report ==="
echo "Date : $(date '+%Y-%m-%d %H:%M:%S %z')"
echo "Log File : $LOG_FILE"
echo
echo "[총 요청 수]"
wc -l < "$LOG_FILE"
echo
echo "[상위 10 IP]"
awk '{print $1}' "$LOG_FILE" | sort | uniq -c | sort -nr | head
echo
echo "[상태코드 분포]"
awk '{print $9}' "$LOG_FILE" | grep -E '^[0-9]{3}$' | sort | uniq -c | sort -nr
echo
echo "[상위 10 URL]"
awk -F\" '{print $2}' "$LOG_FILE" | awk '{print $2}' | sort | uniq -c | sort -nr | head
echo
echo "[404 상위 10 URL]"
awk '$9=="404"{print $7}' "$LOG_FILE" | sort | uniq -c | sort -nr | head
} > /tmp/nginx_rpt.$$
# ---- 메일러 있으면 전송, 없으면 화면 출력 ----
if [[ -n "${TO}" ]]; then
{
echo "From: ${FROM:-sidml123@naver.com}" # ~/.msmtprc의 from와 동일하게
echo "To: ${TO}"
echo "Subject: ${SUBJECT:-Nginx Daily Report}"
echo "Content-Type: text/plain; charset=UTF-8"
echo
cat /tmp/nginx_rpt.$$
} | /usr/bin/msmtp -t --file=/root/.msmtprc
else
# 수신자 없으면 그냥 화면 출력
cat /tmp/nginx_rpt.$$
fi
./nginx-daily.sh -f /var/log/nginx/access.log -t sidml123@naver.com
위와 같이 실행해주면 아래와 같이 메일이 온것을 확인 할 수 있습니다.

'인프라 & 클라우드 > 서버 운영' 카테고리의 다른 글
| VMware DRS 란? (vMotion) (3) | 2025.08.16 |
|---|---|
| Render 무료 서버 설정부터 배포까지 정리 (0) | 2025.05.28 |
| 내 웹서버에 원하는 홈페이지 올리기 (html 파일) (0) | 2024.03.05 |
| Centos7 Nginx 웹서버 설치 (0) | 2024.03.01 |
| MAC M1 리눅스 Centos 서버 구축/설치 (1) | 2024.03.01 |