본문으로 바로가기
development2026년 4월 2일·조회 82

Windows 환경에서 작업 스케줄러 대신 PM2로 Python 프로세스 관리하기

Task Scheduler의 한계를 극복하고 안정적인 백그라운드 작업 자동화를 구현하는 방법

SP

SpacePlanning

SpacePlanning AI Team

## 왜 작업 스케줄러를 포기했는가 많은 개발자들이 Windows 환경에서 Python 스크립트를 주기적으로 실행하기 위해 작업 스케줄러(Task Scheduler)를 사용합니다. 하지만 실제 운영 환경에서는 예상치 못한 문제들이 발생하곤 합니다. 우리 팀도 비슷한 경험을 했습니다. Python 기반 백그라운드 워커를 작업 스케줄러로 관리하다가 다음과 같은 문제들에 직면했습니다: 1. **고아 프로세스 발생** - CLI 도구 실행 중 hang이 발생하면 프로세스가 좀비 상태로 남음 2. **프로세스 추적 불가** - VBS 래퍼나 pythonw.exe를 사용할 경우 실제 프로세스 상태 파악 어려움 3. **자동 복구 기능 부재** - OAuth 토큰 만료, API rate limit 등으로 중단 시 수동 개입 필요 4. **로그 관리의 어려움** - 표준 출력/에러 로그를 별도로 구성해야 함 ## PM2: Node.js만을 위한 도구가 아니다 PM2는 주로 Node.js 애플리케이션 관리 도구로 알려져 있지만, 실제로는 **모든 종류의 프로세스**를 관리할 수 있는 범용 프로세스 매니저입니다. ### PM2의 핵심 장점 **1. 직접적인 프로세스 추적** ```javascript // ecosystem.config.js module.exports = { apps: [{ name: 'python-worker', script: 'python', args: 'worker.py', interpreter: 'none', // Python을 직접 실행 autorestart: true, max_restarts: 100, min_uptime: '30s', restart_delay: 5000 }] } ``` **2. 스마트한 재시작 정책** - `min_uptime`: 최소 실행 시간 미달 시 비정상 종료로 판단 - `restart_delay`: 재시작 간 대기 시간 (무한 재시작 방지) - `max_restarts`: 최대 재시작 횟수 제한 **3. 메모리 기반 자동 재시작** ```javascript max_memory_restart: '2G' // 메모리 2GB 초과 시 자동 재시작 ``` **4. 통합 로그 시스템** ```bash pm2 logs python-worker # 실시간 로그 확인 pm2 logs python-worker --lines 100 # 최근 100줄 ``` ## 실제 구성 예시 ### 1. PM2 설치 (Node.js 필요) ```bash npm install -g pm2 ``` ### 2. ecosystem.config.js 작성 ```javascript module.exports = { apps: [{ name: 'background-worker', script: 'python', args: 'worker_v3.py', interpreter: 'none', cwd: 'C:\\Projects\\MyWorker', // 재시작 정책 autorestart: true, max_restarts: 100, min_uptime: '30s', restart_delay: 5000, // 리소스 관리 max_memory_restart: '2G', // 환경 변수 env: { PYTHONUNBUFFERED: '1', LOG_LEVEL: 'INFO' }, // 로그 설정 error_file: './logs/err.log', out_file: './logs/out.log', log_date_format: 'YYYY-MM-DD HH:mm:ss Z' }] } ``` ### 3. 실행 및 관리 ```bash # 시작 pm2 start ecosystem.config.js # 상태 확인 pm2 status pm2 monit # 실시간 모니터링 # 재시작/중지 pm2 restart background-worker pm2 stop background-worker # 부팅 시 자동 시작 설정 (Windows) pm2 save pm2 startup ``` ## 운영 중 배운 교훈 ### 1. min_uptime 설정의 중요성 프로세스가 시작 직후 반복적으로 실패하는 경우를 감지하려면 `min_uptime`을 적절히 설정해야 합니다. 우리는 30초로 설정하여 초기화 실패를 빠르게 감지할 수 있었습니다. ### 2. 환경 변수 FROZEN 패턴 ```javascript env: { KAFKA_SERVERS: 'broker.example.com:9094' // FROZEN } ``` 주석에 `FROZEN`을 표시하여 변경하면 안 되는 설정을 명시적으로 관리합니다. ### 3. 로그 로테이션 PM2는 기본적으로 로그를 무한히 쌓으므로, `pm2-logrotate` 모듈 설치를 권장합니다: ```bash pm2 install pm2-logrotate pm2 set pm2-logrotate:max_size 10M ``` ## 결론 Windows 작업 스케줄러는 간단한 스크립트 실행에는 충분하지만, 안정적인 프로덕션 워커 운영에는 한계가 있습니다. PM2를 사용하면: - ✅ 프로세스 상태를 정확히 추적 - ✅ 장애 시 자동 복구 - ✅ 통합된 로그 관리 - ✅ 메모리 누수 자동 대응 Node.js 환경이 필요하다는 점이 부담스러울 수 있지만, 얻을 수 있는 안정성과 편의성을 고려하면 충분히 투자할 가치가 있습니다. ## 다음 단계 - PM2 클러스터 모드로 다중 워커 관리하기 - PM2 Plus를 활용한 모니터링 대시보드 구축 - Docker 환경에서의 PM2 활용법
#PM2#Python#프로세스관리#자동화#DevOps#Windows
공유하기:

이 주제에 대해 더 알아보고 싶으신가요?

프로젝트 상담을 통해 맞춤형 솔루션을 제안받으세요.