본문 바로가기

Server Story....

24/365 무인 가동: 리눅스 크론탭(Crontab)으로 자동화 완성하기

반응형

자동화



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 알림" : 크론 작업이 실패했을 때 즉시 알림 받는 법

 

반응형