
리눅스에서 자동화하면 흔히 크론(crontab)을 사용하죠. 하지만 모든 사람이 리눅스를 쓰는 건 아니며, 윈도우나 macOS 환경에서 간단하게 파이썬만으로 반복 작업을 실행하고 싶을 때는? 바로 schedule 모듈이 그 해결책입니다.
이 글에서는 파이썬 스케줄링 라이브러리 schedule의 모든 기능을 초보자도 쉽게 따라할 수 있도록 설명하고, 실전 예제를 통해 실무 적용 방법까지 알려드립니다.
1. schedule 모듈이란?
schedule은 초 단위가 아닌 분 단위 이상의 반복 실행을 위한 간단하고 직관적인 라이브러리입니다. 크론이나 OS 스케줄러 없이, 파이썬 코드 안에서 반복 루틴을 만들 수 있습니다.
✔️ 설치 방법:
pip install schedule
2. 기본 사용법 살펴보기
아래는 가장 기본적인 예제입니다.
import schedule
import time
def job():
print("1분마다 실행되는 작업입니다.")
schedule.every(1).minutes.do(job)
while True:
schedule.run_pending()
time.sleep(1)
실행하면 프로그램이 계속 돌아가면서, 1분마다 job() 함수가 자동 호출됩니다.
3. 다양한 스케줄 설정 예제
- 매일 특정 시간에 실행
schedule.every().day.at("09:00").do(job)
- 월요일마다 실행
schedule.every().monday.at("08:30").do(job)
- 매 시간마다 실행
schedule.every().hour.do(job)
- 5초마다 반복 (비공식)
import threading
def fast_job():
print("5초 간격 작업")
def run_continuously():
stop_run = threading.Event()
def loop():
while not stop_run.is_set():
schedule.run_pending()
time.sleep(1)
t = threading.Thread(target=loop)
t.start()
return stop_run
schedule.every(5).seconds.do(fast_job)
stop = run_continuously()
⚠️ 참고: 공식적으로는 초 단위 실행은 지원하지 않지만, 위와 같이 커스터마이징 가능
4. 인자 전달이 필요한 작업
do() 메서드는 인자를 전달하는 함수에도 사용할 수 있습니다.
def greet(name):
print(f"{name}님, 안녕하세요!")
schedule.every(2).minutes.do(greet, "홍길동")
5. 여러 작업을 동시에 스케줄링하기
여러 개의 작업도 문제없이 등록할 수 있습니다.
def job1():
print("작업 1 실행")
def job2():
print("작업 2 실행")
schedule.every(3).minutes.do(job1)
schedule.every(5).minutes.do(job2)
✔️ schedule.run_pending()을 while 루프에서 계속 호출하기만 하면 여러 작업이 관리됩니다.
6. 실무 적용 예제: 보고서 자동 생성 & 알림
import schedule
import time
from datetime import datetime
def generate_report():
with open("daily_report.txt", "a") as f:
f.write(f"[{datetime.now()}] 보고서 생성 완료\n")
def send_alert():
print("알림: 보고서가 생성되었습니다.")
schedule.every().day.at("09:00").do(generate_report)
schedule.every().day.at("09:01").do(send_alert)
while True:
schedule.run_pending()
time.sleep(1)
👉 위 예제는 매일 오전 9시에 보고서를 생성하고, 1분 후 알림을 출력합니다.
7. 윈도우나 맥에서 자동 실행하는 법
위 스크립트를 단독으로 실행시키기 위해서는 OS의 스케줄러와 연동하면 됩니다:
- Windows: 작업 스케줄러(Task Scheduler)에 등록
- macOS: Automator 또는 launchd 활용
즉, schedule은 반복 루틴을 관리하고, OS 스케줄러는 시작 타이밍만 지정하는 방식입니다.
8. 자주 묻는 질문 (FAQ)
Q1. 프로그램이 종료되면 반복이 중단되나요?
A. 네. 파이썬 코드가 계속 실행 중이어야 schedule 모듈이 동작합니다. 백그라운드 실행하거나 OS 스케줄러와 연동하세요.
Q2. 로그를 따로 저장하고 싶어요
A. 로그 파일에 기록하도록 with open()을 활용하면 됩니다. logging 모듈을 사용하는 것도 좋은 방법입니다.
Q3. 초 단위 실행은 안 되나요?
A. 기본적으로는 아니지만 threading을 사용하면 가능합니다. 초 단위가 필요하다면 APScheduler라는 더 강력한 모듈도 있습니다.
간편하게 시작하는 자동화의 첫걸음
복잡한 설정 없이도 파이썬 코드 안에서 반복 실행 루틴을 구성할 수 있는 schedule 모듈은 자동화를 시작하려는 분들에게 딱 맞는 도구입니다. 처음엔 간단한 로그 기록부터 시작해보세요. 점차 파일 백업, 보고서 생성, 알림 발송 등 다양한 업무에 적용할 수 있을 것입니다.
무조건 어렵게 생각하지 말고, 하루에 한 번만 실행되는 루틴부터 만들어 보세요. 자동화는 생각보다 훨씬 쉽게 시작할 수 있습니다.