답변:
시도한 구문은 실제로 모호합니다. 한 달에 몇 일이 있는지에 따라 몇 달은 홀수 일에, 일부는 짝수 일에 실행됩니다. 계산 방법이 총 확률 수를 취하여 나누기 때문입니다. 날짜 범위를 수동으로 지정하고 홀수 또는 짝수 일을 사용하여이 전략적 동작을 무시할 수 있습니다. 짝수 일 스크립트는 더 긴 달의 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 월이 열악한 경우 날짜 범위가 마지막 날 또는 이틀과 일치하지는 않지만 해가되지는 않습니다. 그것은 나열했다.
이 방법의 유일한 'gotcha'는 홀수주기에 있고 31 일이있는 달이 지나면 달의 첫 번째 명령도 실행된다는 것입니다. 마찬가지로 짝수주기를 강요하면 윤년마다 3 일주기가 1 월이고 2 월 말이됩니다. "매일 다른 날"의 규칙적인 패턴이 매월 짝수 또는 홀수 일에 빠지는 것은 아니며,이를 강제하는 방법은 여분의 달리기를하거나 달리는 것을 놓치게된다는 사실을 실제로 해결할 수는 없습니다. 일 수가 일치하지 않는 달.
0,2,4...,30,32,34
있으며 범위를 벗어난 값은 절대 일치하지 않습니다.
0 0 2-30/2 * * command
예상대로 작동합니다.
가능성은 다음과 같이 하루 중 하나를 사용하고 있다고 생각합니다.
# for odd days
test $(((`date +%j` % 2))) != 0 && command
# for even days
test $(((`date +%j` % 2))) == 0 && command
Unix 및 Linux 시스템에서 테스트되었습니다.
test $(($(date +%j) % 2)) == 0 && command
test $(($(date +%s) / 86400 % 2)) == 0 && command
"other"인 경우 매일 확인하십시오 :-) ( bc
프로그램 필요)
0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command
(코드가 올바르게 나타나는지 확실하지 않습니다. date +%s
부분은 백 아포스트로피 사이에 있습니다.)