cron 예약 작업: 시간대·중복 실행·로그 회전까지

English version

TECH INSIGHT / EXPLAINED

5분마다 시작하는 리포트가 6분 걸리면 다음 실행은 기다릴까요? 일반적인 cron은 앞 실행의 완료를 기다리지 않습니다. 스케줄을 쓰기 전에 시간대·작업 환경·중복 실행 정책을 함께 정해야 합니다.

세 사람이 시간표와 잠금 장치로 겹치는 예약 작업을 설명한다.
개념을 설명하는 AI 제작 일러스트. 세 사람이 시간표와 잠금 장치로 겹치는 예약 작업을 설명한다.

실제 프로젝트의 로컬 실행 화면

기존 프로젝트의 화면 또는 함수를 로컬에서 실행해 촬영했습니다. 개인정보 없는 샘플 입력을 사용했으며, 실행한 범위는 각 이미지 아래에 설명했습니다.

GoClaw의 기존 예약 작업 화면을 로컬 실행해 비활성 샘플 작업과 0 9 * * 1-5 표현식을 표시했습니다. API 응답만 샘플로 제공했으며 실제 작업 등록·스케줄 실행·중복 실행 검사는 하지 않았습니다.
GoClaw의 기존 예약 작업 화면을 로컬 실행해 비활성 샘플 작업과 0 9 * * 1-5 표현식을 표시했습니다. API 응답만 샘플로 제공했으며 실제 작업 등록·스케줄 실행·중복 실행 검사는 하지 않았습니다.

표현식은 시각을 고른다

사용자 crontab의 다섯 필드는 분·시·일·월·요일입니다. */5 * * * *는 매시간 0·5·10…55분을 선택하며, 직전 작업 종료 5분 뒤를 뜻하지 않습니다. 0 9 * * 1-5는 월~금 09시이고 거래소 휴장일은 별도로 처리해야 합니다.

Cronie 계열에서 일과 요일을 둘 다 제한한 0 9 1 * 1은 매월 1일 또는 월요일에 실행됩니다. 다른 스케줄러가 같은 문법을 쓴다고 의미까지 같다고 가정하지 마세요. 시스템 crontab은 사용자 이름 필드가 추가됩니다.

내 터미널과 같은 환경이 아니다

cron의 PATH·셸·작업 디렉터리가 로그인 터미널과 다를 수 있습니다. 실행 파일과 설정 경로를 명시하고, 로그 디렉터리 쓰기 권한을 확인하세요. cron 서비스가 설치·실행 중인지도 확인해야 합니다. 가상환경은 activate 대신 그 환경의 파이썬 실행 파일을 직접 지정할 수 있습니다.

# User crontab; Cronie-compatible example
CRON_TZ=Asia/Seoul
# Directories must exist and be writable by this user.
*/5 * * * * /usr/bin/flock -n /opt/bot/run/report.lock /opt/bot/.venv/bin/python /opt/bot/report.py >> /opt/bot/log/report.log 2>&1

이 예의 CRON_TZ는 지원되는 구현에서만 스케줄 시간대를 지정합니다. 서버의 man 5 crontab을 확인하고 짧은 읽기 전용 작업으로 실제 실행 시각을 검증하세요. 일광절약시간 적용 지역에는 빠지거나 반복되는 시각도 고려해야 합니다.

flock가 보호하는 범위

같은 서버에서 같은 잠금 파일을 사용하는 실행끼리만 조정됩니다. -n은 잠금 실패 시 기다리지 않고 끝내므로 건너뛴 회차를 별도로 기록하는 편이 좋습니다. 다른 서버, 다른 파일 경로, 네트워크 파일시스템 조건까지 자동으로 해결하지는 않습니다. 주문 중복 방지는 여기에 영속 주문 식별자와 거래소 상태 대조를 더해야 합니다.

로그는 삭제보다 회전을 먼저

계속 쓰는 report.log는 수정 시각이 계속 갱신되므로 '30일 지난 파일 삭제'만으로 크기를 제한할 수 없습니다. 크기·기간 기준 회전, 보관 개수, 디스크 사용량 경보를 함께 정하세요. 먼저 출력·종료 코드·실행 시각을 기록하는 읽기 전용 작업을 등록하고, 중복 시작과 실패를 의도적으로 시험합니다.

Windows에서는 작업 스케줄러의 실행 계정·시작 위치·로그온 조건·이미 실행 중일 때의 정책을 설정합니다. GUI 인증이 필요한 앱은 로그온하지 않은 환경에서 동작하지 않을 수 있습니다. 상시 실행 서비스의 재시작은 cron 반복 호출보다 서비스 관리자의 역할로 분리하는 편이 명확합니다.

참고 자료

내용·예제 검토: 2026-09-29

댓글