오후 11시(EST)부터 오전 6시(EST)까지 매분 실행해야 하는 Python 프로그램이 있습니다. 이를 위해 크론 작업을 어떻게 예약할 수 있나요?
* 23-6 * * 1-5 python my_program.py
이것이 작동할까요? 아니면 이를 위해 2개의 별도 크론 작업을 작성해야 합니까?
답변1
이와 같은 랩어라운드의 범위는 모호합니다. 오히려 시간을 지정 23,0-6
하고 향후 문제를 피하십시오.
Cron은 1분마다 crontab 파일의 내용을 확인하여 시간과 조건이 일치하면 해당 줄에 표시된 스크립트를 실행합니다.
이 상황에서는 다음과 같은 일련의 우연이 일치해야 합니다.
- 오후 11시~오후 11시 59분, 오전 0시~오전 6시 59분
- 월요일부터 금요일까지
따라서 이러한 우연의 집합이 성립되는 것은 매 순간 작동됩니다.
거기 있을 거라 기대하지 마세요시간 및 요일 범위예를 들어 보여주세요.토요일.
답변2
cron
특히 Unix/Linux 시스템에는 여러 가지 구현이 있기 때문에 귀하가 제공한 타임라인이 불분명합니다 . 자정에 랩어라운드를 충족하려면 두 범위를 지정하는 것이 좋습니다.자정 이후의 시간 범위를 갖는 crontab 항목AT&T/BSD cron
구현에서는 범위 목록을 처리할 수 없습니다.
그러나 아마도 더 중요한 것은 정의가 2300(오후 11시)부터 0659(오전 6시 59분)까지 매분마다 프로그램을 실행한다는 점입니다. 이는 필요한 것보다 거의 한 시간 늦습니다. 또한 월요일부터 금요일까지만 실행됩니다( 1-5
). 월요일 오후 11시에 시작하여 스크립트를 실행하고 토요일 오전 6시에 중지하려면 다음 항목이 필요합니다.
* 23 * * 1-5 python my_program.py # 11pm-midnight Mon-Fri
* 0-5 * * 2-6 python my_program.py # midnight-5.59am Tue-Sat
0 6 * * 2-6 python my_program.py # 6am Tue-Sat
마지막으로, 일반적으로 시스템 기본 시간대를 사용하여 실행한다는 점에 유의하세요. cron
이는 반드시 대화형으로 사용하는 시간대일 필요는 없습니다. 오후 11시부터 오전 6시까 cron
지가 오후 11시부터 오전 6시까지라는 생각과 일치하는지 확인하려면 약간의 테스트가 필요할 수 있습니다 .
답변3
그러면 작업이 실행됩니다.매 순간주 1~5일 오후 11시~오전 6시 59분.
여기서는 1 ==> 월요일, 5 ==> 금요일입니다.
하지만 cron은 모든 조건이 맞는지 확인하고 토요일은 해당요일에 포함되지 않기 때문에 금요일 자정 12시에 멈춥니다. 다른 날에는 모두 잘 작동할 것입니다.
답변4
이 bash 스크립트를 /etc/opt/ranger.sh에 저장합니다.
currenttime=$(date +%H:%M)
if [[ "$currenttime" > "23:00" ]] || [[ "$currenttime" < "06:00" ]]; then
run my Python script
fi
그런 다음 다음 cronjob 항목을 추가합니다.
* * * * * /etc/opt/ranger.sh