매월 마지막 토요일에 연극 일정을 잡고 싶습니다. 나는 다음을 생각해 냈습니다.
45 23 22-28 * * test $(date +\%u) -eq 6 && echo "4th Saturday" && sh /folder/script.sh
이게 맞는 건가요, 아니면 바꿔야 하나요? 지난 토요일에만 호출되므로 지금은 테스트할 수 없습니다. 조언해주세요.
매달 마지막 일요일에 대해 다음과 같은 내용이 있는데 내용을 잘 이해하지 못합니다. 첫 번째 부분은 일요일인 24를 제공하고 그 이후 -eq는 7을 제공합니다. 이것이 무엇을 의미하는지 모르겠습니다.
00 17 * * 0 [ $(cal -s | tail -2 | awk '{print $1}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
지난 토요일에 받을 수 있도록 위의 내용을 수정할 수 있나요?
Romeo의 도움으로 다음과 같은 답을 얻었습니다.
00 17 * * 6 [ $(cal -s | tail -2 | awk '{print $7}') -eq $(date | awk '{print $3}') ] && /folder/script.sh
답변1
당신의 논리가 작동하지 않습니다. 매월 마지막 토요일은 29일, 30일 또는 31일이 될 수 있습니다. 따라서 확인을 수행하는 가장 좋은 방법은 매주 토요일에 실행하고 해당 달의 마지막 7일인지 스크립트를 확인하는 것입니다.
45 23 * * 6 sh /folder/script.sh
date
그리고 스크립트에 다음 콘텐츠를 추가합니다(여기서 GNU 구현을 가정).
if [ "$(date -d "+7 day" +%m)" -eq "$(date +%m)" ]
then echo "This is not one of last 7 days in month.";exit
fi
<rest of your script>
cron의 줄과 관련하여 다음과 같이 시작하도록 편집해야 합니다.
00 17 * * 6
(6은 토요일, 0 또는 7은 일요일을 의미함)
답변2
Dillon Crontab(내 생각에는 더 좋고 더 많은 기능이 포함되어 있으며 아나크론도 제공함)을 사용하게 된다면 다음과 같은 옵션이 있습니다.
날짜와 요일을 모두 지정하면 해당 월의 N번째 날로 해석됩니다.
45 23 5 * 6 /path/script.sh
매월 마지막 월요일 등을 요청하려면 "5번째" 월요일을 요청하세요. 해당 달에 월요일이 4번만 있는 경우에도 항상 마지막 월요일 등과 일치합니다.
귀하와 다른 사람들이 향후 문의에 이 답변을 사용할 수 있기를 바랍니다.
인용하다:
답변3
그리고 나머지 답변은 귀하가 질문한 방식(cronjob을 통해)으로 구성됩니다.
이것이 시스템 타이머가 존재하는 이유라는 점은 주목할 가치가 있습니다. 그들은 더 강력한 스케줄링을 가지고 있습니다.
cronjob이 아닌 시스템 서비스와 일치하는 타이머를 만듭니다.
타이머에서 OnCalendar 사용
OnCalendar=Sat *-*~07/1 23:45:00
아니면 좀 더 자세히...
OnCalendar=Sat *-1,3,5,7,8,10,12-25..31 23:45:00
OnCalendar=Sat *-4,6,9,11-24..30 23:45:00
OnCalendar=Sat *-2-22..29 23:45:00
https://www.freedesktop.org/software/systemd/man/systemd.timer.html
https://www.freedesktop.org/software/systemd/man/systemd.time.html
https://wiki.archlinux.org/title/Systemd/Timers
https://documentation.suse.com/smart/linux/html/task-create-systemd-timers/index.html#id-1.5
답변4
00 01 * * 6 [ $(date +\%d) -gt $(date \-d "-$(date +\%d) days month -7 days" +\%d) ] && /run/my/script
$(날짜 +%d)는 현재 날짜입니다.
$(date -d "-$(date +%d) days Month -7 days" +%d)는 "이번 달의 일수(즉, 지난달의 마지막 날)에 한 달을 더한 후 7일을 뺀 값입니다. ”
따라서 2023년 2월 14일에 실행하면 다음과 같은 결과를 얻습니다.
[ 14 -gt 21 ] && /run/my/script
그래서 실행되지 않습니다.
6일차에 체크하면 매주 토요일 원하는 시간에 실행됩니다.