이 글에는 제휴 링크(affiliate link)가 포함되어 있습니다. 서버 가입 링크로 가입하시면 추가 비용 없이 크레딧 혜택을 받으실 수 있으며, 블로그 운영에 도움이 됩니다.
매일 서버 점검하는 것은 사람이 할 일이 아니다
VPS를 운영하면 매일 확인해야 할 것들이 있습니다: 디스크가 꽉 찼는지, 메모리가 충분한지, 백업이 정상적으로 돌았는지, 보안 로그에 이상은 없는지. 이걸 매일 손으로 확인하면 잊게 되고, 잊으면 사고가 납니다. 셸 스크립트로 점검·백업·알림을 자동화하면 더 이상 걱정할 필요가 없습니다.
이 튜토리얼은 VPS 데브옵스 시리즈의 피날레편으로, 지금까지 다룬 모든 기술(방화벽, 백업, 모니터링, 서비스 관리)을 하나의 자동화 스크립트로 통합합니다.
1. 자동화가 필요한 VPS 일일 점검 항목
- 디스크 사용량: 90% 초과 시 경고
- 메모리: 가용 RAM 부족 시 알림
- CPU 로드: 코어 수 대비 과부하 확인
- 백업 성공 여부: restic/pg_dump 백업 파일 존재 및 최신성
- 주요 서비스 상태: nginx, postgresql, docker 등 실행 중인지
- 보안 로그: SSH 실패 로그인 급증 감지
2. 일일 점검 스크립트
#!/bin/bash
# daily-check.sh — VPS 일일 점검 스크립트
set -euo pipefail
LOG="/var/log/daily-check.log"
ALERT_EMAIL="your@email.com"
THRESHOLD_DISK=90
THRESHOLD_MEM=90
echo "===== $(date) =====" | tee -a "$LOG"
# 디스크 사용량
DISK_USE=$(df / | awk 'NR==2 {print int($5)}')
if [ "$DISK_USE" -gt "$THRESHOLD_DISK" ]; then
echo "WARNING: Disk usage at ${DISK_USE}%" | tee -a "$LOG"
fi
# 메모리 사용량
MEM_USE=$(free | awk '/Mem:/ {printf "%d", $3/$2*100}')
if [ "$MEM_USE" -gt "$THRESHOLD_MEM" ]; then
echo "WARNING: Memory usage at ${MEM_USE}%" | tee -a "$LOG"
fi
# 로드 평균
LOAD=$(uptime | awk -F'load average:' '{print $2}')
echo "Load average:$LOAD" | tee -a "$LOG"
# 주요 서비스 상태
for svc in nginx postgresql docker sshd; do
if systemctl is-active --quiet "$svc"; then
echo "OK: $svc running" >> "$LOG"
else
echo "ALERT: $svc NOT running" | tee -a "$LOG"
fi
done
# 최근 SSH 실패 로그인 (지난 24시간)
FAIL_COUNT=$(journalctl -u sshd --since "24 hours ago" 2>/dev/null | grep -c "Failed password" || true)
echo "SSH failed logins (24h): $FAIL_COUNT" | tee -a "$LOG"
echo "Check complete." | tee -a "$LOG"
3. 백업 자동화 통합
점검 스크립트에 백업을 통합합니다. 여기서는 restic 증분 백업을 예로 듭니다:
#!/bin/bash
# nightly-backup.sh — 매일 백업 + 검증
set -euo pipefail
export RESTIC_REPOSITORY="/mnt/backup/restic"
export RESTIC_PASSWORD_FILE="/root/.restic-pass"
# 백업 실행
restic backup /var/www /etc /home --tag daily
# 오래된 스냅샷 정리 (30일 보관)
restic forget --keep-daily 30 --prune
# 백업 검증
restic check --read-data-subset=10%
echo "Backup OK: $(date)" >> /var/log/backup.log
PostgreSQL을 운영 중이라면 pg_dump 백업도 함께 추가하세요:
pg_dump -Fc mydb | gzip > /mnt/backup/db/mydb-$(date +%Y%m%d).sql.gz
find /mnt/backup/db/ -name "*.sql.gz" -mtime +14 -delete
4. cron으로 매일 자동 실행
스크립트를 매일 새벽에 실행되도록 cron에 등록합니다:
# crontab -e (root)
# 매일 새벽 3시 점검
0 3 * * * /usr/local/bin/daily-check.sh
# 매일 새벽 4시 백업
0 4 * * * /usr/local/bin/nightly-backup.sh
주의: 점검(3시)과 백업(4시) 사이에 시간 간격을 두어 디스크 I/O 경합을 피합니다.
5. Discord/Slack 알림 연동
이상 발생 시 메신저로 알림을 받습니다:
#!/bin/bash
# alert.sh — webhook 알림
send_alert() {
local msg="$1"
local webhook="https://discord.com/api/webhooks/YOUR_WEBHOOK"
curl -s -X POST "$webhook" \
-H "Content-Type: application/json" \
-d "{\"content\": \"[VPS Alert] $msg\"}"
}
# daily-check.sh 끝에 추가
if grep -q "WARNING\|ALERT" "$LOG"; then
send_alert "$(hostname): $(grep -E 'WARNING|ALERT' "$LOG" | tail -5)"
fi
6. systemd timer로 더 정밀하게 (cron 대체)
cron보다 정밀한 제어가 필요하면 systemd timer를 사용합니다:
# /etc/systemd/system/vps-daily-check.service
[Unit]
Description=VPS Daily Check
[Service]
Type=oneshot
ExecStart=/usr/local/bin/daily-check.sh
# /etc/systemd/system/vps-daily-check.timer
[Unit]
Description=Run daily check at 3 AM
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
# 활성화
sudo systemctl enable --now vps-daily-check.timer
systemd timer는 journalctl로 실행 이력을 확인할 수 있고, 실패 시 재시도 옵션도 설정할 수 있어 cron보다 강력합니다.
전체 자동화 파이프라인 요약
매일 03:00 → daily-check.sh (디스크/메모리/서비스/보안 점검)
매일 04:00 → nightly-backup.sh (restic 백업 + 보관 정책)
이상 감지 시 → Discord/Slack webhook 알림
이 파이프라인을 구축하면 서버를 방치해도 문제가 생기면 알림이 오고, 백업은 매일 자동으로 돌아갑니다. 1인 운영의 핵심은 반복 작업을 스크립트로 만들고 cron/timer에 맡기는 것입니다.
추천 VPS: 이 튜토리얼은 Vultr, DigitalOcean, Hetzner VPS에서 그대로 적용됩니다. 한국 사용자 기준 Vultr 서울 리전이 가장 빠릅니다.
시리즈 전체 흐름
이 튜토리얼은 VPS 데브옵스 시리즈의 마지막 편입니다. 앞선 단계들을 순서대로 따라했다면 이미 다음이 구축되어 있을 것입니다:
- W22: ufw 방화벽 + SSH 보안
- W23: Nginx 리버스 프록시 + SSL
- W20: restic 백업 자동화
- W24: systemd 서비스 관리
- W18: GitHub Actions CI/CD 또는 W27 push-to-deploy
- W28: 이 튜토리얼 (셸 자동화로 전체 통합)
이제 서버는 스스로 점검하고, 스스로 백업하고, 문제가 생기면 알려줍니다. 축하합니다 — 1인 VPS 데브옵스 파이프라인 완성입니다.



















