![매월 첫 번째 월요일에 크론 작업을 실행하시겠습니까?](https://rvso.com/image/1316111/%EB%A7%A4%EC%9B%94%20%EC%B2%AB%20%EB%B2%88%EC%A7%B8%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%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
매월 첫째 월요일 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