VPS 셸 스크립팅 자동화 완벽 가이드 2026: 매일 점검·백업을 한 번에

이 글에는 제휴 링크(affiliate link)가 포함되어 있습니다. 서버 가입 링크로 가입하시면 추가 비용 없이 크레딧 혜택을 받으실 수 있으며, 블로그 운영에 도움이 됩니다.

VPS 셸 스크립팅 자동화 완벽 가이드 2026: 매일 점검·백업을 한 번에
사진: Noah Sussman / flickr (BY)

핵심 원리를 파악하면 실무에 바로 적용할 수 있는 확실한 기준을 세울 수 있습니다. 구체적인 설정 방법과 주의사항을 통해 시행착오를 줄이고 즉각적인 문제 해결이 가능합니다.

이 문서에서는 실전에서 바로 쓸 수 있는 노하우를 바탕으로 단계별 가이드를 제공합니다. 초보자도 쉽게 따라 할 수 있도록 구성했습니다.

매일 서버 점검하는 것은 사람이 할 일이 아니다 어떻게 해야 할까요?

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. 백업 자동화 통합 — 요약

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 대체) — 요약

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 데브옵스 시리즈의 마지막 입니다. 앞선 단계들을 순서대로 따라했다면 이미 다음이 구축되어 있을 것입니다:

이제 서버는 스스로 점검하고, 스스로 백업하고, 문제가 생기면 알려줍니다. 축하합니다 — 1인 VPS 데브옵스 파이프라인 완성입니다.

자주 묻는 질문 (FAQ)

Q1. 추가로 궁금한 점이 있다면 어떻게 하나요?

본문의 가이드를 다시 한번 확인하시고, 구체적인 상황에 맞게 적용하시면 해결 가능합니다. 실무 환경에 따라 결과는 달라질 수 있습니다.

Q2. 추가로 궁금한 점이 있다면 어떻게 하나요?

본문의 가이드를 다시 한번 확인하시고, 구체적인 상황에 맞게 적용하시면 해결 가능합니다. 실무 환경에 따라 결과는 달라질 수 있습니다.

Q3. 추가로 궁금한 점이 있다면 어떻게 하나요?

본문의 가이드를 다시 한번 확인하시고, 구체적인 상황에 맞게 적용하시면 해결 가능합니다. 실무 환경에 따라 결과는 달라질 수 있습니다.

Q4. 추가로 궁금한 점이 있다면 어떻게 하나요?

본문의 가이드를 다시 한번 확인하시고, 구체적인 상황에 맞게 적용하시면 해결 가능합니다. 실무 환경에 따라 결과는 달라질 수 있습니다.

관련 글

📎 이 영상의 발표 자료

누구나 무료로 다운로드할 합니다.