이는 매우 간단하며 cron
정기적으로 발생하는 작업을 예약하는 데 사용할 수 있습니다. 특정 일이 덜 빈번하게 발생하길 원합니다. 예를 들어 작업을 실행한 다음 다시 시도하기 전에 2~12시간을 기다려야 합니다. (여기에서는 합리적인 유형의 임의성이 작동합니다.) 이를 수행할 수 있는 좋은 방법이 있습니까?
답변1
"at" 명령을 사용할 수 있습니다.
at now +4 hours -f commandfile
또는
at now +$((($RANDOM % 10)+2)) hours -f commandfile
답변2
옵션 1
cron에서 작업이 매시간(또는 매시간) 실행되도록 예약하되 작업 앞에 다음과 같은 접두어를 붙입니다( SHELL=/bin/bash
crontab에 있다고 가정).
[ $[RANDOM % 12] -eq 0 ] || exit 0; YOUR_JOB_HERE
그러면 작업이 매번 예정대로 실행될 확률은 약 12분의 1입니다.
옵션 2
하루 시작 시 임의의 시간을 계산하고 이를 사용하여 at
하루의 모든 실행을 예약하는 크론 작업을 예약합니다. 이는 훨씬 더 복잡하지만 다양한 무작위 분포를 사용할 수 있습니다. 예를 들어 12시간보다 2시간이 더 많을 수 있습니다.
아름다운 인쇄
*이 난수 생성 방법은 실제로 편향되어 있습니다. 문제는 최대값(32767)이 12(빼기 1)의 배수가 아니라는 점입니다. 문제를 명확하게 확인하려면 최대값이 11(12×1-1 = 11)인지 비교하세요. 0은 0을 생성하고, 1은 1을 생성하는 방식으로 11이 11을 생성할 때까지 계속됩니다. 하지만 13이면 12는 0을 생성하고 13은 1을 생성합니다. 그래서 0과 1은둘값을 생성하지만 2-11에는 값이 하나만 있으므로 가능성이 낮습니다. 그러므로 편향적이다. 최대값으로 나누기 수식을 사용하도록 전환해도 문제가 해결되지 않고 왜곡된 숫자만 변경됩니다. 실제 수정에는 훨씬 더 많은 코드가 필요합니다(기본적으로 필요하지 않을 때 다시 시도하여 최대값을 위장하는 것도 포함됩니다).