맥북에서 cron을 사용하는 것도 가능하지만, macOS에서는 기본적으로 cron보다 launchd (Launch Agents) 사용이 더 안정적이고 권장됩니다. cron이 동작하지 않는 이유는 macOS에서 cron이 완전히 활성화되어 있지 않거나, 환경변수 설정이 달라서 종종 작동하지 않을 수 있기 때문이에요.
기존 등록 크론탭 (원하는 기능)
# 월-금, 10시, 17시에 동작
0 10,17 * * 1-5 cd /Volumes/Works/Monitoring && PYTHONPATH=/Volumes/Works/Monitoring /Volumes/Works/Monitoring/venv/bin/python -m apps.console.wiki.check_deploy_status >> /var/log/deploy_check.log 2>&1
✅ 추천 방법: launchd를 사용하는 방식
1. 아래와 같은 plist 파일을 생성합니다:
예: ~/Library/LaunchAgents/com.picory.deploycheck.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.picory.deploycheck</string>
<key>ProgramArguments</key>
<array>
<string>/Volumes/Works/Monitoring/venv/bin/python</string>
<string>-m</string>
<string>apps.console.wiki.check_deploy_status</string>
</array>
<key>WorkingDirectory</key>
<string>/Volumes/Works/Monitoring</string>
<key>EnvironmentVariables</key>
<dict>
<key>PYTHONPATH</key>
<string>/Volumes/Works/Monitoring</string>
</dict>
<key>StandardOutPath</key>
<string>/var/log/deploy_check.log</string>
<key>StandardErrorPath</key>
<string>/var/log/deploy_check.log</string>
<!-- 월~금, 10시 및 17시에 실행 -->
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key><integer>10</integer>
<key>Minute</key><integer>0</integer>
<key>Weekday</key><integer>1</integer> <!-- 월요일 -->
</dict>
<dict>
<key>Hour</key><integer>17</integer>
<key>Minute</key><integer>0</integer>
<key>Weekday</key><integer>1</integer>
</dict>
<!-- 화~금 동일하게 반복 -->
<dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>2</integer></dict>
<dict><key>Hour</key><integer>17</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>2</integer></dict>
<dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>3</integer></dict>
<dict><key>Hour</key><integer>17</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>3</integer></dict>
<dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>4</integer></dict>
<dict><key>Hour</key><integer>17</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>4</integer></dict>
<dict><key>Hour</key><integer>10</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>5</integer></dict>
<dict><key>Hour</key><integer>17</integer><key>Minute</key><integer>0</integer><key>Weekday</key><integer>5</integer></dict>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
2. 터미널에서 등록:
launchctl load ~/Library/LaunchAgents/com.picory.deploycheck.plist
3. 확인:
launchctl list | grep picory
✅ 또는 cron 방식으로 유지하고 싶다면 확인해야 할 것들
1. cron 로그 확인
macOS는 기본적으로 cron 로그를 syslog에 남깁니다.
grep CRON /var/log/system.log
2. cron은 로그인 환경 변수 안 따라감
PYTHONPATH 설정이 제대로 안 먹힐 수 있음 → 전체 경로로 스크립트 안에서 sys.path에 직접 추가하는 방식도 추천됨.
3. cron 수정안
0 10,17 * * 1-5 cd /Volumes/Works/Monitoring && /Volumes/Works/Monitoring/venv/bin/python -m apps.console.wiki.check_deploy_status >> /Users/yourusername/deploy_check.log 2>&1
- deploy_check.log 파일을 /var/log 말고 본인 사용자 폴더로 바꾸는 게 권장됨 (권한 문제 없음)
- yourusername은 본인 맥북 사용자 계정으로 바꾸세요.
이상입니다.
반응형