매월 첫 번째 월요일에 크론 작업을 실행하시겠습니까?

매월 첫 번째 월요일에 크론 작업을 실행하시겠습니까?

매월 첫째 월요일 8시 30분에 cron에서 작업을 실행하고 싶습니다. cron Wikipedia 페이지에 따르면

일반적으로 시간/날짜 지정 필드가 모두 현재 시간 및 날짜와 일치할 때 작업이 실행되지만, 한 가지 예외가 있습니다. "월"과 "요일"이 모두 제한되는 경우("*" 아님)어느 하나"날짜" 필드(3) 또는 "요일" 필드(5)는 현재 날짜와 일치해야 합니다.

(내 강조)

그렇다면 매월 첫 번째 월요일에는 할 수 없고, 그 달의 첫 번째(또는 다른 날)에만 할 수 있다는 뜻인가요? 나는 그것을 해결할 방법을 생각할 수 없습니다.

답변1

실제 crontab 명령에 조건을 넣을 수 있습니다(일반적인 방법):

[ "$(date '+%u')" = "1" ] && echo "It's Monday"

로케일이 EN/US인 경우 문자열을 비교할 수도 있습니다(초기 답변).

[ "$(date '+%a')" = "Mon" ] && echo "It's Monday"

이제 이 조건이 한 달의 처음 7일 중 하나에 해당하면 첫 번째 월요일이 됩니다. 하지만 crontab에서는 백분율 구문을 이스케이프해야 합니다(일반적인 방법).

0   12  1-7 *   *   [ "$(date '+\%u')" = "1" ] && echo "It's Monday"

로케일이 EN/US인 경우 문자열을 비교할 수도 있습니다(초기 답변).

0   12  1-7 *   *   [ "$(date '+\%a')" = "Mon" ] && echo "It's Monday"

echo명령을 실행하려는 실제 명령으로 바꾸십시오 . 나는 찾았다유사한 접근법도.

답변2

나는 스페인어 로케일을 사용하는 컴퓨터를 가지고 있으므로 이 접근 방식은 나에게 적합하지 않습니다.변경 사항

다른 언어도 실패할 수 있으므로 언어 ​​장벽을 제거하는 허용된 답변을 약간 변형했습니다.

 0 9 1-7 * *   [ "$(date '+\%u')" = "1" ] && echo "¡Es lunes!"

답변3

일수를 처리할 필요가 없을 때 더 쉽다는 것을 알았습니다.

매월 첫 번째 월요일을 실행합니다.

0 2 * * 1 [ `date '+\%m'` == `date '+\%m' -d "1 week ago"` ] || /path/to/command

즉, 1주일 전의 달이 이번 달과 같지 않으면 해당 달의 1일(= 월요일)이 됩니다.

마찬가지로 셋째주 금요일에도

0 2 * * 6 [ `date '+\%m'` == `date '+\%m' -d "3 weeks ago"` ] || /path/to/command

즉, 3주 전 달이 이번 달과 다른 경우 해당 달의 3일인 6일(= 금요일)입니다.

답변4

다음과 같이 매월 넷째 월요일 오후 4시에 작업이 실행되도록 예약했습니다.

0 16 22-28 * Mon [ "$(date '+\%a')" == "Mon" ] && touch /home/me/FourthMonOfMonth.txt

관련 정보