격일로 명령을 실행하도록 "월" 필드를 사용하여 cron을 구성하는 경우 다음과 같습니다.
1 22 */2 * * COMMAND
해당 월의 날짜가 홀수(1, 3, 5, 7, 9 등)일 때마다 실행됩니다.
cron이 매월 특정 날짜(예: 2, 6, 8, 10 등)에 실행되도록 구성하려면 어떻게 해야 합니까? (문자 그대로 지정하지 않고 매월 일수가 다르기 때문에 문제가 됩니다.)
답변1
시도하는 구문은 실제로 모호합니다. 한 달의 일수에 따라 어떤 달은 홀수일에 실행되고 어떤 달은 짝수일에 실행됩니다. 전체 가능성 수를 나누어 계산하기 때문입니다. 날짜 범위를 수동으로 지정하고 홀수 또는 짝수 일을 사용하여 이 이상한 동작을 무시할 수 있습니다. 짝수일 스크립트는 긴 달의 31일에 실행되지 않으므로 30일을 짝수일의 기준으로 사용하고 이를 31일인 것처럼 나누도록 구체적으로 지정하면 강제로 홀수일에 실행될 수 있습니다. 번호가 매겨진 일.
구문은 다음과 같습니다.
# Will only run on odd days:
0 0 1-31/2 * * command
# Will only run on even days:
0 0 2-30/2 * * command
일수가 다른 달에 대한 귀하의 우려는 여기에서 중요하지 않습니다. 왜냐하면 어떤 달도 그보다 더 많은 일수가 없고 가난한 2월의 경우 날짜 범위가 마지막 하루나 이틀과 결코 일치하지 않을 것이기 때문입니다. 그러나 그것은 아무런 해를 끼치지 않습니다.
이 접근 방식의 유일한 "문제"는 홀수일 주기인 경우 31일이 있는 다음 몇 달 동안 명령도 해당 달 1일에 실행된다는 것입니다. 마찬가지로, 짝수 기간을 적용하면 각 윤년은 2월 말에 3일의 기간이 됩니다. "격일로"라는 규칙적인 패턴이 항상 짝수일이나 홀수일에 발생하는 것은 아니라는 사실을 피할 수는 없으며, 어떤 식으로든 그렇게 하도록 강요하면 결국에는 그렇지 않으면 실행 날짜가 일치하지 않아 한 달을 놓칠 것입니다.
답변2
한 가지 가능성은 다음과 같이 일년 중 하루를 사용하는 것입니다.
# for odd days
test $(((`date +%j` % 2))) != 0 && command
# for even days
test $(((`date +%j` % 2))) == 0 && command
Unix 및 Linux 시스템에서 테스트되었습니다.
답변3
"기타"인지 매일 확인해보자 :-) ( bc
프로그램 필요)
0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command
(코드가 제대로 표시되는지 잘 모르겠습니다. date +%s
백틱 사이에 있는 부분입니다.)
답변4
개인적으로 나는 ((jultest=$juledate/2))
10보다 큰 숫자에 대한 문제 때문에 이 방법을 사용하지 않습니다.
다른 사용자가 제안했듯이 bc는 보다 강력한 솔루션을 제공할 수 있습니다.
juldate=$(date +%j)
jultest=$(echo "obase=16;$juldate*2" | bc)
if [ $juldate -ne $jultest ]
then
echo "This is an odd numbered week"
fi