
작업이 실행되도록 cron 명령을 작성하고 싶습니다.한 번주중 임의의 시간에 - crontab 자체를 수정하지 않고도 이것이 가능합니까? 나는 난수 생성기를 기반으로 작업을 실행할 수도 있고 실행하지 않을 수도 있는 함수를 작성하는 것을 고려했습니다. 하지만 명령이 확실히 실행되고 주에 다른 어떤 것보다 가능성이 더 높은 순간이 없었으면 합니다. 두번째...
답변1
한 가지 빠른 해결책은 일주일에 한 번 호출되고 실제 작업을 수행하기 전에 임의의 시간(1주일 이내) 동안 자체적으로 지연되는 cron 스크립트를 작성하는 것입니다. 예를 들어 다음 명령을 사용합니다(bash 및 zsh에서 작동).
sleep $(($RANDOM/32768.*60*24*7))m
답변2
cron
와 를 조합하여 사용하세요 at
. crontabbed 스크립트에는 다음과 유사한 내용이 포함됩니다.
TIME=$(($RANDOM/32768.*60*24*7))m
at -f /usr/local/bin/scriptfile $TIME
/usr/local/bin/scriptfile
실행하려는 명령이 있습니다 .
답변3
해당 문제에 대한 빠른(더럽고 나쁜, 아래 설명 참조) 해결책은 매일 cron으로 실행되고 다음과 같이 설계된 bash 스크립트를 만드는 것입니다.
해당 쉘 스크립트는 매일 명령을 실행할 확률이 1/7이며 성공적으로 실행될 때마다 파일의 타임스탬프를 업데이트합니다(이 경우 'touch' 사용).
스크립트를 미리 실행할지 결정하려면 파일이 7일 이상 지난 것인지 확인하면 됩니다('find'가 여기에서 작업을 수행할 수 있음).
더 좋은 방법이 있을텐데 너무 피곤해서 보기 힘드네요 ^^
업데이트: Joe가 지적했듯이 이 스크립트에는 몇 주 동안 전혀 실행되지 않을 수 있다는(그리고 결국에는 실행될 예정이라는) 큰 결함이 있습니다. 따라서 이를 사용해서는 안 되지만 반례로 남겨 두겠습니다.
답변4
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
$@
따라서 기본적으로 0분에서 10080분 사이, 즉 일주일 이내에 무작위 로 weekrand {some command} {parameters}
실행됩니다 .{some command}
{parameters}
이를 사용하는 예제 crontab
라인:
0 0 1 * * nice -n 10 /usr/local/bin/weekrand /root/jobs/weekly_job