[unix] 25 분마다 CronJob

25 분마다 작업을보다 쉽게 ​​수행 할 수있는 방법이 있는지 알고 싶습니다. cronjob에서 분 매개 변수를 * / 25로 지정하면 매시간 25 분 및 50 분에만 실행됩니다.



답변

crontab의 명령이 함께 실행 /bin/sh되므로 산술 확장을 사용하여 현재 분 모듈러스 25가 0과 같은지 여부를 계산할 수 있습니다.

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cron이 전체 항목을 5 분마다 실행하지만 현재 분 (에포크 이후 분 단위) 모듈로 25가 0 인 경우에만 실행 your_command됩니다.

다른 사람들이 지적했듯이이 발생하지 않도록 1 일 25 분으로 나누어없는 your_command매일 같은 시간에 실행되도록하지만 마다 25 분 실행합니다.


답변

최선의 방법은 20 분 또는 30 분에 실행하는 것입니다.

다음으로 5 분마다 트리거 한 다음 내부 카운트 또는 타임 스탬프를 유지하고 5 번째 트리거마다 또는 마지막 실행 이후 25 분이 경과 한 것이 가장 좋습니다.

더 복잡한 것은 자정부터 하루에 올바른 시간을 계산하고 하루가 끝날 때 오류를 받아들이는 것입니다. 이것은 crontab 항목을 다른 시간으로 복제하는 것을 포함합니다.

그보다 더 복잡한 것은 한 달 동안 시간을 ​​계산하는 것입니다. 여기에는 여러 조합을 다루기 위해 많은 crontab 항목 사본이 필요합니다.

마지막으로 항상 데몬에서 자신을 구현하고 예약을 수행 할 수 있습니다.


답변

나는 그것에 직접적인 경험이 없지만 fcron 은 당신이 원하는 것을 즉시하는 것처럼 보입니다. 문서 에 따르면 빈도를 지정할 수 있습니다.

# Get our mails every 30 minutes
@ 30 getmails -all

# make some security tests every 48 hours of system up time,
# force a mail to be sent to root even if there is no output
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh


답변

여기서 무엇이 문제인지 간단히 설명하겠습니다. 분 필드에 25를 입력 cron하면 현재 시간의 분이 25와 같을 때 (1 시간에 한 번) 실행됩니다. 일치하는 목록을 입력 할 수 있습니다. 문제는 60 (1 분)을 25로 나눌 수 없으므로 시간을 기준으로 여러 항목을 추가해야합니다. 60과 25의 최소 공배수는 300, 즉 5 * 60입니다. 따라서 원래 시작으로 돌아갈 때까지 5 시간 동안 순환해야합니다. 예를 들면 다음과 같습니다.

0, 25, 50
15, 40
5, 30, 55
20, 45
10, 35

그러나 여기서 다시 24 (하루에 시간)는 5로 나눌 수 없으며 5와 24의 최소 공배수는 단순히 5 * 24 = 120입니다.


답변

파일의 마지막 수정 시간으로 재생할 수 있습니다

  • /usr/local/bin/age파일의 나이를 출력 하는 작은 스크립트 (예 :)를 작성 하십시오.

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

귀하의 crontab은 다음과 같습니다 (25 분은 1500 초라고 가정하면)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

FHS 에 따르면 시스템 종료 / 시작시 삭제되지 않기 때문에 /var/tmp대신 사용 합니다 ./tmp


답변

나는 다음과 같이 작동해야한다고 생각합니다 0 0/25 * * *?


답변