![휴일(3일 연휴의 월요일)에 크론 작업을 실행하지 않는 크론 팁](https://rvso.com/image/1263747/%ED%9C%B4%EC%9D%BC(3%EC%9D%BC%20%EC%97%B0%ED%9C%B4%EC%9D%98%20%EC%9B%94%EC%9A%94%EC%9D%BC)%EC%97%90%20%ED%81%AC%EB%A1%A0%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%ED%81%AC%EB%A1%A0%20%ED%8C%81.png)
우리는 서비스 시작 및 중지와 같은 크론 작업을 실행하고 하루가 끝날 때 이러한 서비스의 로그 파일을 중앙 저장소에 보관하는 각 시스템에 대해 약 100개의 시스템 설정을 보유하고 있습니다.
우리가 겪는 고민 중 하나는 3일 연휴입니다(공휴일은 휴무입니다). 우리는 그 날 서비스가 시작되어 비즈니스 파트너의 컴퓨터에 연결되는 것을 원하지 않습니다.
현재 우리는 가장 중요한 작업을 수동으로 주석 처리하고 하루 종일 많은 오류가 발생하도록 하여 이를 수행하고 있습니다. 이상적이지 않습니다.
기본적으로 작업의 요일 필드에 '1-5'가 설정된 경우 월요일부터 금요일까지가 아닌 '근무일'을 의미합니다. 우리는 어떤 날이 실제로 '근무일'인지 추적하는 데이터베이스를 보유하고 있습니다.
그렇다면 Cron의 요일 일치 알고리즘을 무시할 수 있습니까? 아니면 월요일 휴일에 시작되는 일을 피하기 위해 cron 설정을 쉽게 설정할 수 있는 다른 방법이 있습니까?
감사해요!
답변1
Cron은 이러한 결정을 지원하지 않습니다. 매우 빠르게 복잡해집니다. 여기 캐나다에서는 공휴일이 지방 간에도 일정하지 않습니다.
휴일 데이터베이스를 확인하고 휴일이면 종료하는 러너 스크립트를 작성하겠습니다. 다음과 같이 시도해 보세요:
#!/bin/bash 오늘=$(날짜 +%Y%m%d) if grep -q $TODAY /etc/holidays; 그 다음에 echo $*에 대한 휴일 건너뛰기 0번 출구 fi $*
답변2
이를 수행하는 몇 가지 방법을 상상할 수 있지만 가장 실용적인 솔루션은 모든 크론 작업의 정확한 설정에 따라 달라집니다. 예를 들어:
근무일 데이터베이스를 스크립트를 통해 조사할 수 있는 경우 다음 날(월요일)이 근무일인지 여부를 결정하고 어딘가에 파일을 설정/지우는 크론 작업을 일요일에 실행할 수 있습니다. 모든 cron 작업은 이 파일의 존재를 찾아 그에 따라 실행하거나 종료하도록 선택할 수 있습니다.
또는
(확인 가능한) 데이터베이스에 근무일이라고 표시된 경우에만 다른 모든 항목을 실행하는 하나의 마스터 작업으로 모든 개별 크론 항목을 바꿀 수 있습니다.