무작위 cron 명령 명령을 작성하고 싶습니다.

작업이 실행되도록 cron 명령을 작성하고 싶습니다. 일단 일주일 동안 임의의 시간에 – crontab을 수정하지 않고도 가능합니까? 난 난수 생성기를 기반으로 작업을 실행하거나하지 않을 수있는 함수를 작성하는 것을 고려해 보았습니다. 그러나 명령을 확실히 실행하고 다른 어떤 것보다 가능성이 높은 주에 두 번째가 없도록하고 싶습니다. 둘째…



답변

한 가지 간단한 해결책은 일주일에 한 번 호출되는 cron 스크립트를 작성하는 것입니다.
예를 들어 다음 명령을 사용하여 실제 작업을 수행하기 전에 임의의 시간 (주보다 길지 않음) 동안 지연됩니다 (bash 및 zsh에서 작동)

sleep $(($RANDOM/32768.*60*24*7))m


답변

다음의 조합을 사용하십시오. cronat. crontabbed 스크립트에는 다음과 유사한 내용이 포함됩니다.

TIME=$(($RANDOM/32768.*60*24*7))m
at -f /usr/local/bin/scriptfile $TIME

에서 /usr/local/bin/scriptfile 실행하고 싶은 명령이 있습니다.


답변

그 문제에 대한 빠른 (그리고 더러운, 나쁜, 아래 주석 참조) 해결책은 매일 cron으로 실행되고 다음과 같이 설계된 bash 스크립트를 작성합니다.

이 셸 스크립트는 매일 명령을 실행하는 데 1/7의 기회가 주어지며 성공적으로 실행될 때마다 파일의 타임 스탬프를 업데이트합니다 ( ‘touch’를 사용).
사전에 스크립트를 실행할지 결정하기 위해 파일이 & gt; 7 일인지 확인해야합니다 ( ‘찾기’가 여기에서 작업을 수행 할 수 있음).

더 좋은 방법이있을 것입니다. 그러나 나는 그것을보기에는 너무 피곤합니다. ^^

최신 정보 : Joe가 지적했듯이이 스크립트에는 몇 주 동안 실행되지 않을 수있는 (그리고 결국에는) 실행되지 않을 것이라는 점에서 큰 결함이 있습니다. 따라서 당신은 그것을 사용해서는 안되지만 그것을 반대 예제로 남겨 둘 것입니다.


답변

lacqui는 정확하지만 그의 설명은 약간 짧습니다.

cron :

0 15 * * 1 /home/myhome/cron/schedulerandomjob.bash

/home/myhome/cron/schedulerandomjob.bash :

#!/bin/bash
TIME="now + $(( RANDOM % (60*24*7) )) minutes "
at -f /path/to/your/script $TIME

cron은 일주일에 한 번 실행되며 일주일에 임의로 발생하는 ‘at’작업을 예약합니다. (nb, 여기에서 볼 수있는 사건이 있습니다 … 주말과주의 시작 부분에서 일이 가능하기 때문에 두 번에 걸쳐 동시에 실행될 수도 있습니다. 중요하다면 빼기 모듈러스에서 몇 분이면 확실합니다.


답변

나는 작은 스크립트를 작성했다. weekrand (조언을 위해 어딘가에서 온라인으로 보았고, 그것이 어디 있는지 잊어 버렸습니다).

#!/bin/bash

FLOOR=1
RANGE=10080 # number of minutes per week

number=0   #initialize
while [ "$number" -le $FLOOR ]
do
  number=$RANDOM
  let "number %= $RANGE"  # Scales $number down within $RANGE.
done

sleep ${number}m
$@

그래서 기본적으로 weekrand {some command} {parameters} 무작위로 {some command}{parameters} 0에서 10080 분 사이, 즉 1 주일 이내.

예제 crontab 그것을 사용하는 행 :

 0  0    1   *   *      nice -n 10 /usr/local/bin/weekrand /root/jobs/weekly_job


답변