Crontab 샘플

반응형

1) 매일 오전 9시 Flask 서버 자동 재시작

(A) 스크립트 만들기

예: /opt/app/restart_flask.sh

#!/usr/bin/env bash
set -euo pipefail

# ── 한 가지 방식만 골라 쓰세요 ───────────────────────────
# [1] systemd로 관리 중인 경우 (예: gunicorn/uvicorn 서비스)
# sudo systemctl restart my-flask.service

# [2] Supervisor로 관리 중인 경우
# sudo supervisorctl restart my-flask

# [3] Docker Compose로 관리 중인 경우 (프로젝트 디렉터리에서)
# cd /opt/app
# docker compose restart web  # 서비스명에 맞게 수정
# ─────────────────────────────────────────────────────────

권한 부여:

sudo mkdir -p /opt/app
sudo tee /opt/app/restart_flask.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
# 예: systemd 사용 시
sudo systemctl restart my-flask.service
EOF
sudo chmod +x /opt/app/restart_flask.sh

(B) crontab 등록

crontab -e

아래 한 줄 추가 (표준/에러 로그도 남김):

0 9 * * * /opt/app/restart_flask.sh >> /var/log/restart_flask.log 2>&1

2) 매주 월요일 데이터 백업

(A) 백업 스크립트

예: /opt/backup/weekly_backup.sh

  • /data 폴더를 압축해 /backup에 저장 (경로는 환경에 맞게 수정)
  • flock으로 중복 실행 방지
  • 30일 지난 백업 자동 정리
#!/usr/bin/env bash
set -euo pipefail

LOCKFILE="/var/lock/weekly_backup.lock"
SRC_DIR="/data"                 # 백업할 경로
DST_DIR="/backup"               # 백업 파일 저장 경로
STAMP="$(date +'%Y%m%d_%H%M%S')"
ARCHIVE="${DST_DIR}/data_backup_${STAMP}.tar.gz"

mkdir -p "$DST_DIR"

# 중복 실행 방지
exec 200>"$LOCKFILE"
flock -n 200 || { echo "Another backup is running"; exit 1; }

# 백업 수행
tar -czf "$ARCHIVE" "$SRC_DIR"

# 30일 지난 파일 정리
find "$DST_DIR" -type f -name 'data_backup_*.tar.gz' -mtime +30 -delete

echo "Backup created: $ARCHIVE"

설치/권한:

sudo mkdir -p /opt/backup /backup
sudo tee /opt/backup/weekly_backup.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
LOCKFILE="/var/lock/weekly_backup.lock"
SRC_DIR="/data"
DST_DIR="/backup"
STAMP="$(date +'%Y%m%d_%H%M%S')"
ARCHIVE="${DST_DIR}/data_backup_${STAMP}.tar.gz"
mkdir -p "$DST_DIR"
exec 200>"$LOCKFILE"
flock -n 200 || { echo "Another backup is running"; exit 1; }
tar -czf "$ARCHIVE" "$SRC_DIR"
find "$DST_DIR" -type f -name 'data_backup_*.tar.gz' -mtime +30 -delete
echo "Backup created: $ARCHIVE"
EOF
sudo chmod +x /opt/backup/weekly_backup.sh

(B) crontab 등록 (월요일 03:00)

crontab -e

아래 한 줄 추가:

0 3 * * 1 /opt/backup/weekly_backup.sh >> /var/log/weekly_backup.log 2>&1

체크리스트

  • 경로(/opt/app, /opt/backup, /data, /backup)와 서비스명(my-flask.service 등)을 환경에 맞게 수정하세요.
  • flock이 없다면 util-linux 패키지를 설치하세요(대부분 기본 제공).
  • Docker/Compose 사용 중이면 재시작 스크립트에서 해당 부분만 남기고 나머지는 지우세요.
  • 크론은 시스템 시간대를 사용합니다(서버 TZ 확인: timedatectl).

 

반응형