CRON 실행을 예약하는 방법이 있습니까?
- 연중 25~36주 동안만
- 월~금만 가능합니다(주말은 제외)
여름휴가를 맞아 우리 제품에 대한 주문이 잦아들기 때문이다. 매주 CRON 설정을 변경하는 것은 꽤 지루한 작업입니다. @weekly는 별표 설정과 결합할 수 없으므로 다음과 같은 내용은 유효한 마크업이 아니라는 것을 이해합니다.
* * 1,2,3,4,5 * * @weekly php /app/cmd import >> /logs/cron-offers.log
답변1
다음과 같은 방법으로 이 작업을 수행할 수 있습니다.
# m h dom mon dow command
* * * * 1-5 /bin/bash -c "if [ `date +%W` -lt 15 ] && [ `date +%W` -gt 11 ]; then php /app/cmd import >> /logs/cron-offers.log; fi"
첫 번째와 두 번째 "[]"에 정확한 주 수를 입력하세요.
답변2
Cron은 매우 기본적인 스케줄러로 간주되며 구문을 통해 관리자는 좀 더 일반적이지 않은 일정을 쉽게 작성할 수 없습니다. Stock cron에는 사용 가능한 주 번호가 없으므로 창의력을 발휘해야 합니다.
25~36주차 에 따르면 ncal -w 2018
다음과 같습니다.
May June July August September
Mo 7 14 21 28 4 11 18 25 2 9 16 23 30 6 13 20 27 3
Tu 1 8 15 22 29 5 12 19 26 3 10 17 24 31 7 14 21 28 4
We 2 9 16 23 30 6 13 20 27 4 11 18 25 1 8 15 22 29 5
Th 3 10 17 24 31 7 14 21 28 5 12 19 26 2 9 16 23 30 6
Fr 4 11 18 25 1 8 15 22 29 6 13 20 27 3 10 17 24 31 7
Sa 5 12 19 26 2 9 16 23 30 7 14 21 28 4 11 18 25 1 8
Su 6 13 20 27 3 10 17 24 1 8 15 22 29 5 12 19 26 2 9
18 19 20 21 22 22 23 24 25 26 26 27 28 29 30 31 31 32 33 34 35 35 36
한 가지 접근 방식은 원하는 일정을 결합하여 여러 배치를 만드는 것입니다. 예를 들어 먼저 6월 마지막 2주의 평일을 선택한 다음 두 번째 직업에서는 7월과 8월의 모든 평일을 선택하고 세 번째 직업으로는 9월 1일을 선택합니다.
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
* * 18,19,20,21,22,25,26,26,28,29 jun * php /app/cmd import >> /logs/cron-offers.log
* * * jul,aug mon,tue,wed,thu,fri php /app/cmd import >> /logs/cron-offers.log
* * 3-7 9 * php /app/cmd import >> /logs/cron-offers.log
또 다른 옵션은 단순히 배치를 매일 실행하고 적절한 프로그래밍/스크립팅 언어의 보다 강력한 구문을 사용하여 배치 프로세스 자체(예: PHP 코드)가 즉시 실행해야 할지 종료해야 할지 결정하도록 하는 것입니다.