Cron 작업, 임의 시작이지만 기간 내에 할 수 없습니다.

스크립트를 매일 매일 한 번 실행하여 0900에서 1200 사이의 시간을 시작하고
싶습니다. 대시 구문에 대해 완전히 확신 할 수 없습니다. 스크립트가 사이 9-12에서 1 시간마다 실행 되거나 스크립트 사이 에서 RANDOMLY로 시작한다는 의미입니까? 9-12? 후자가 필요하기 때문에.



답변

임의의 시간에 작업을 실행할 수있는 cron 구현을 본 적이 없습니다. 이상한 요구 사항입니다. 설명서에서 알 수 있듯이의 9-12바로 가기이며 9,10,11,129에서 12 사이의 모든 시간을 의미합니다.

임의의 시간에 작업을 실행하려면 간격이 시작될 때 작업을 실행하고 임의 지연을 추가하십시오. 예를 들어, 9시에서 12시 사이에 임의의 시간에 실행하려면 다음을 수행하십시오.

SHELL=/bin/bash
0 9 * * * sleep $((3600 * (RANDOM % 4))); do_stuff

RANDOMbash 또는 ksh 가 필요하며 기본 쉘에서 사용하지 못할 수 있습니다.

9에서 12 사이의 임의의 시간에 두 번째 해상도 RANDOM % 10800로 실행하려면 지연으로 사용할 수 있지만 RANDOM0..32767 범위에 있기 때문에 0에서 32768 사이의 지연에 대한 편향이 있습니다. 10800 = 이 편견을 피하려면 :

SHELL=/bin/bash
0 9 * * * max=$((32768/10800*10800)); while delay=$RANDOM; ((delay > max)); do :; done; sleep $((delay % 10800)); do_stuff

답변

파이썬 스크립트에 비슷한 요구 사항이 있었지만 임의 + 절전 기능을 사용하여 스크립트 자체를 통해 구현 한 다음 @ 자정에 cron 작업을 시작했습니다.

from time import sleep
import random

sleep_time = random.randint(0,7200)  #7200 seconds = 2 hours * 60 min * 60 sec
print(sleep_time)
sleep(sleep_time)