Cron 작업, 임의 시작이지만 기간 내에


12

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

답변:


8

임의의 시간에 작업을 실행할 수있는 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

5
"홀수 요건입니다." 동의하지 않습니다. 패키지 관리자 나 구성 관리 클라이언트와 같은 서버에 정기적으로 체크인해야하는 많은 응용 프로그램은 천둥 무리 상황 을 피하기 위해 실행 시간을 단축해야 합니다. 실제로 이러한 많은 응용 프로그램에는 기본 제공 옵션 (예 : --randomwaityum에 --splay대한 인수 또는 chef-client에 대한 인수)이 있지만 그렇지 않은 응용 프로그램의 경우 임의 실행 시간이 작업 스케줄러에 유용한 기능입니다.
jayhendren


2

파이썬 스크립트에 비슷한 요구 사항이 있었지만 임의 + 절전 기능을 사용하여 스크립트 자체를 통해 구현 한 다음 @ 자정에 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)

이것은 리눅스 배포판의 일반적인 스크립트가 종종 시작 시간을 무작위 화하는 방법입니다. 고정 된 시간을 가지고 시작 부분에서 잠을 자십시오.
Ned64
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.