반응형

1. 도입 및 배경 (Why?) 💡
우리는 지금까지 데이터를 뽑고(MSSQL), 수집하고(Selenium), 보고하는(Slack) 법을 배웠습니다. 하지만 이 모든 과정을 매일 아침 우리가 직접 실행 버튼을 눌러야 한다면? 그것은 진정한 자동화가 아닙니다.
진정한 시니어 개발자는 "내가 잠든 사이에도 서버는 일하게" 만듭니다.
오늘은 리눅스의 시간 기반 잡 스케줄러인 **크론탭(Crontab)**을 활용해, 우리가 만든 에이전트들이 정해진 시간마다 한 치의 오차 없이 움직이도록 설정해 보겠습니다.
2. 스케줄링 작동 원리 (What?) 🏗️
사용자가 미리 정의한 시간 규칙(Cron Expression)에 따라 리눅스 커널이 해당 명령어를 대신 실행해 주는 구조입니다.
Plaintext
[ Cron Daemon ] ----(매 분마다 체크)----> [ 스케줄 리스트 ]
| |
+----------(시간 일치 시)-----------+
|
v
[ 실행 명령어 ] ----> (Python Script / Docker Container)
|
+----(결과 로그 기록)----> [ log_file.log ]
3. 핵심 문법: 크론 표현식 마스터하기 🛠️
크론탭은 5개의 별(* * * * *)로 시간을 정의합니다. 이 규칙만 알면 세상의 모든 주기를 설정할 수 있습니다.
Plaintext
* * * * *
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 요일 (0-6, 0:일요일)
│ │ │ └────── 월 (1-12)
│ │ └─────────── 일 (1-31)
│ │ └─────────────── 시 (0-23)
└───────────────────────── 분 (0-59)
- 0 9 * * * : 매일 아침 9시 정각에 실행
- */30 * * * * : 30분 간격으로 무한 반복
- 0 0 * * 1 : 매주 월요일 자정에 주간 보고서 생성
4. 실전 적용: 에이전트 자동 실행 등록 🐍
이제 터미널에서 직접 스케줄을 등록해 보겠습니다.
■ 크론탭 편집 모드 진입
Bash
crontab -e
■ 스케줄 추가 (맨 아래 삽입)
Bash
# [매일 오전 8시] 뉴스 수집 및 슬랙 알림 에이전트 실행
0 8 * * * /usr/bin/python3 /home/user/scripts/crawler_agent.py >> /home/user/logs/cron.log 2>&1
# [1시간마다] 디스크 용량 체크 스크립트 실행
0 * * * * /usr/bin/python3 /home/user/scripts/check_disk.py >> /home/user/logs/disk.log 2>&1
⚠️ 시니어의 팁: 크론탭에서는 환경 변수가 다르기 때문에 반드시 /usr/bin/python3와 같은 절대 경로를 사용해야 에러가 나지 않습니다.
5. 트러블슈팅: 왜 내 크론탭은 작동하지 않을까? 🛠️
🚨 에러: 수동으로는 되는데 크론탭에선 안 돼요!
- 원인: 경로(Path) 문제입니다. 크론탭은 아주 제한적인 환경 변수만 가집니다.
- 해결: 스크립트 내부에서 파일을 읽고 쓸 때도 os.path.join(os.path.dirname(__file__), 'data.csv') 처럼 상대 경로 대신 절대 경로를 계산해 사용하세요.
🚨 에러: 로그 파일이 너무 커져서 서버가 멈췄어요!
- 원인: >>를 이용해 로그를 계속 쌓기만 했기 때문입니다.
- 해결: 우리가 이전에 배운 [Logrotate] 설정을 이 크론 로그 파일에도 적용해 주면 완벽합니다!
🔍 더 알아보기
이 자동화 시스템을 더 견고하게 만들고 싶다면, 제 블로그 검색창에 아래 키워드를 입력해 보세요!
- "Logrotate" : 크론탭이 남긴 로그 파일을 자동으로 관리하는 법
- "Docker" : 도커 컨테이너 자체를 스케줄링하는 법
- "Slack 알림" : 크론 작업이 실패했을 때 즉시 알림 받는 법
반응형
'Server Story....' 카테고리의 다른 글
| 데이터의 연금술: 파이썬 Pandas로 리포트 자동 생성 및 PDF 시각화 (0) | 2026.04.06 |
|---|---|
| 파이썬 셀레니움(Selenium): 동적 웹 데이터 수집 자동화 가이드 (0) | 2026.04.03 |
| 도커(Docker)로 파이썬 에이전트 24시간 무중단 가동하기 (0) | 2026.04.03 |
| 파이썬으로 MSSQL 데이터 추출 및 자동 전처리 가이드 (0) | 2026.04.02 |
| 서버 가동률 99.9% 도전: Slack 실시간 장애 알림 시스템 구축 (0) | 2026.04.02 |