내 crontab 작업이 올바르게 작성되었는지 알고 싶습니다. VPS에서 실행하고 싶지만 모니터링이 사실상 불가능합니다. 더 이상 고민하지 않고 내 크론 작업은 다음과 같습니다.
# cd into directory at 2:57 AM
57 2 * * 1-5 cd /folder_name
# activate the virtual environment
58 2 * * 1-5 . env/bin/activate
# run the main script
59 2 * * 1-5 python main.py
# at 5pm break the script (worried the most about this part)
0 16 * * 1-5 ^C
또한 시스템 시계를 동부 시간으로 변경했습니다. 이는 cron 작업이 동부 시간대를 사용하여 실행된다는 의미입니까?
답변1
아니요, cron
껍질이 아닙니다. 스크립트 작성:
#!/bin/sh
cd /folder_name
. env/bin/activate
exec python main.py
실행 가능하게 만든 다음 항목을 지정하십시오 crontab
.
57 2 * * 1-5 /path/to/script
그런 다음 스크립트는 매주 월요일부터 금요일까지 현지 시간대(컴퓨터가 생각하는 시간대)의 2시 57분에 실행되어야 합니다. 메일 시스템을 올바르게 구성한 경우 결과(있는 경우)가 메일로 전송됩니다.
답변2
크론 작업이 잘못 작성되었습니다. 각 크론 작업에는 고유한 환경이 있습니다. 즉, 해당 cd
명령은 후속 크론 작업과 독립적입니다.
가상 환경의 경우 가상 환경을 수동으로 활성화하고 which python
직접 실행하는 것을 권장합니다. 그러면 python
해당 가상 환경 내에서 항상 실행될 수 있는 전체 경로가 제공됩니다 . cron에서 이 Python 경로를 사용해야 합니다.
최종 크론탭은 다음과 같아야 합니다:
0 3 * * 1-5 /full/path/to/virtualenv/python /full/path/to/main.py
나중에 프로세스를 종료하는 경우 이 문제를 해결하는 가장 일반적인 방법은 pidfile을 사용하는 것입니다. 이를 수행하는 데 도움이 되는 몇 가지 Python 라이브러리가 있습니다. 이 답변이 주제에 대해 매우 철저하지만 crontab 문제와는 실제로 관련이 없습니다.