Windows 작업 스케줄러로 Python 스크립트 예약 실행

작업을 매번 수동으로 실행하는 대신, 원하는 시간에 자동으로 실행되도록 예약하면 반복 작업을 자동화할 수 있습니다. Windows 작업 스케줄러는 특정 시간이나 간격에 작업을 자동으로 실행하도록 예약하는 기능을 제공합니다. Python 스크립트도 동일하게 예약할 수 있습니다.
중요: 로컬 환경과 서버 환경의 Python 경로가 다를 수 있으니 정확한 경로를 사용하세요. 관리자 권한이 필요한 작업이면 예약 시 권한 옵션을 반드시 활성화하세요.
무엇을 얻을 수 있나
- 반복 작업을 자동화하여 시간 절약
- 백그라운드에서 일관된 실행 보장
- 별도 서드파티 도구 없이 Windows만으로 가능
기본 흐름(한 문장 요약)
- 작업 스케줄러 열기 → 2) 새 작업 또는 기본 작업 생성 → 3) 프로그램으로 Python 실행기 또는 .bat 파일 지정 → 4) 권한/조건 설정 → 5) 수동 실행으로 검증
작업 스케줄러에서 Python 스크립트 직접 예약하기
작업 스케줄러로 Python 스크립트를 일간/주간/사용자 지정 일정에 맞춰 실행하도록 예약할 수 있습니다. 실행 방법은 다음과 같습니다.
- Win + R을 누르고
taskschd.msc
를 입력한 뒤 Enter로 작업 스케줄러를 엽니다.
- 오른쪽 또는 상단 메뉴에서 작업 만들기 또는 기본 작업 만들기… (Create Basic Task…)을 선택하여 새 예약을 시작합니다.
- 작업에 이름과 설명을 입력하고 다음으로 진행합니다.
- 작업 시작 빈도를 선택합니다(예: 일간, 주간, 한 번 등).
- 필요한 경우 시작 날짜와 시간을 설정합니다. 다음 화면인 동작(Action) 섹션에서 프로그램 시작(Start a program) 을 선택합니다.
- 프로그램/스크립트(Program/script) 필드에는 Python 실행기 경로(예: C:\Python39\python.exe)를 입력하고, 인수 추가(Add arguments) 필드에 실행할 스크립트의 전체 경로(예: C:\scripts\my_script.py)를 입력합니다. 필요하면 시작 위치(Start in) 에 작업의 작업 디렉터리를 지정합니다.
- 다음으로 설정을 검토하고 마침(Finish)으로 작업을 생성합니다.
이제 지정한 시간에 Python 스크립트가 자동으로 실행됩니다.
대안 방법: 배치 파일(.bat)을 사용해 예약하기
직접 Python을 지정해도 되지만, 배치 파일을 만드는 방법이 더 안정적일 수 있습니다. 배치 파일을 사용하면 경로 문제를 줄이고 실행 로그를 쉽게 남길 수 있습니다.
메모장을 열고 아래 코드를 붙여 넣습니다:
@echo off
"C:\Path\to\python.exe" "C:\Path\to\your_script.py"
pause
- 첫 번째 경로는 Python 실행기의 위치로 교체하세요.
- 두 번째 경로는 실행할 스크립트의 경로로 교체하세요.
pause
는 배치 파일 창이 바로 닫히지 않도록 하고, 실행 결과를 수동으로 확인할 때 유용합니다.
Python 위치가 확실하지 않으면 명령 프롬프트에서 다음 명령으로 확인하세요:
where python
여러 경로가 나타나면 적절한 버전(예: 프로젝트에 맞는 가상환경의 python.exe)을 선택하세요. 파일을 .bat
확장자로 저장한 뒤, 해당 배치 파일을 작업 스케줄러에서 프로그램/스크립트로 지정하면 됩니다.
작업을 자동으로 실행하도록 허용하기
예약된 작업이 중단 없이 실행되도록 하려면 작업 속성을 확인하세요.
- 작업 스케줄러 라이브러리에서 해당 작업을 찾아 우클릭 후 속성(Properties) 을 엽니다.
- 일반(General) 탭에서 사용자가 로그온했는지 여부와 관계없이 실행(Run whether user is logged on or not) 을 선택합니다. 스크립트가 관리자 권한을 필요로 하면 가장 높은 권한으로 실행(Run with highest privileges) 을 체크하세요.
- 조건(Conditions) 탭에서는 노트북 등을 사용하는 경우 컴퓨터가 AC 전원에 연결된 경우에만 시작(Start the task only if the computer is on AC power) 옵션의 체크를 해제해 두는 것이 안전합니다.
- 변경 후 OK를 누르면 자격 증명(암호) 입력을 요구할 수 있습니다. 작업이 백그라운드에서 실행되기 위해 계정 권한과 암호가 필요합니다.
예약 실행 확인 방법
설정 후 수동으로 실행해 작동을 확인하세요. 작업 스케줄러에서 작업을 우클릭하고 실행(Run) 을 선택합니다.
스크립트가 생성하는 로그 파일이나 출력 결과를 검토하여 정상 실행 여부를 확인합니다.
실행되지 않는다면 먼저 다음 항목을 점검하세요:
- Python 실행 파일 경로와 스크립트 경로가 정확한가?
- 작업의 시작 위치(Start in)가 올바른가? (상대 경로 문제 회피)
- 작업이 실행될 때 사용할 계정에 필요한 파일 접근 권한이 있는가?
- 필요 시 관리자 권한(Run with highest privileges)을 체크했는가?
문제 발생 시 점검 체크리스트
- 작업을 수동으로 실행했을 때 작업 기록(Task History)에 오류가 남아 있는지 확인
- 작업의 마지막 실패 코드(Error code)를 메모하고 검색
- 스크립트 내 예외가 로그로 남는지(파일 또는 DB 로그) 확인
- 가상환경(venv)을 사용하는 경우 venv의 python.exe를 직접 지정
- 네트워크 드라이브를 사용하는 경우 작업이 네트워크 자원에 접근할 권한이 있는지 확인
언제 이 방법이 실패하는가(예시)
- 스크립트가 UI 상호작용을 필요로 하는 경우(작업 스케줄러는 기본적으로 세션 0에서 실행됨)
- 네트워크 폴더 인증이 사용자 세션에 종속적인 경우
- 시스템이 절전 모드로 진입하거나 전원 정책 때문에 작업이 중단되는 경우
대안 및 확장 옵션
- Docker 컨테이너에서 Cron 또는 Windows 서비스로 관리: 환경 일관성 필요 시 유용
- Windows 서비스로 등록: 장기간 백그라운드 실행에 적합
- 서드파티 스케줄러(예: Jenkins, Airflow): 복잡한 워크플로우와 의존성 관리 필요 시 권장
- NSSM(Non-Sucking Service Manager)를 사용해 .exe로 서비스화
실행 전/후 담당자별 체크리스트
- 개발자: 스크립트가 비대화형(non-interactive)인지 확인, 예외 로깅 추가
- 시스템 엔지니어: 서비스 계정에 필요한 폴더 및 네트워크 권한 할당
- 데이터 분석가: 실행 결과 검증용 샘플 출력 또는 상태 파일 생성
간단한 검사 기준
- 수동 실행 시 Exit code 0 반환
- 스크립트가 의도한 출력 파일/DB 레코드를 생성
- 작업 기록에서 성공 로그 확인
간단한 운영 절차(SOP)
- 변경 예정: 스크립트 수정 시 먼저 로컬에서 테스트
- 스케줄러 등록: .bat로 래핑 후 작업 스케줄러에 등록
- 검증: 수동 실행 후 로그 확인
- 배포: 예약 시간에 자동 실행 확인
- 모니터링: 실행 실패 시 알림(예: 이메일, 슬랙)
문제 발생 시 런북(간단한 복구 절차)
- 작업 히스토리 확인 → 실패 코드 확인
- 수동 실행 → 콘솔 출력 또는 로그 확인
- 경로/권한 문제라면 작업 속성에서 계정/시작 위치 수정
- 그래도 실패하면 스크립트를 로컬에서 디버깅
채택을 위한 의사결정 기준(간단한 휴리스틱)
- 단순 반복 작업(파일 백업, 보고서 생성 등): 작업 스케줄러 사용
- 복잡한 의존관계와 재시도/알림 필요: Airflow/Jenkins 권장
- 배포 환경 일관성 필요: Docker 기반 스케줄링 권장
수용성 테스트(테스트 케이스)
- 케이스 1: 수동 실행 시 성공, 로그 파일에 정상 메시지 존재
- 케이스 2: 예약 실행 후 지정된 출력 파일 생성
- 케이스 3: 권한 없는 계정으로 실행 시 접근 거부 에러 확인
요약
Windows 작업 스케줄러는 추가 도구 없이도 Python 스크립트를 안정적으로 자동화할 수 있는 간단하고 강력한 방법입니다. 정확한 Python 경로와 작업의 시작 위치를 지정하고, 권한 옵션을 적절히 설정한 뒤 수동 실행으로 검증하면 대부분의 문제를 방지할 수 있습니다.
요약 핵심 항목:
- 작업 생성 → Python 또는 .bat 지정 → 권한/조건 설정 → 수동 검증
- venv를 사용하면 venv의 python.exe를 직접 지정
- UI 상호작용이 필요하거나 복잡한 워크플로우인 경우 대안 고려
간단 알림 문구: 스크립트를 컨테이너화하여 배포 일관성을 높일 수 있습니다. Docker 기반 실행 가이드는 별도 문서를 참고하세요.