25 분마다 CronJob


13

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

답변:


15

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 분 실행합니다.


단순히 온화한 ...
토마스

ISC에서 cron을 구현하면 적어도 백 슬래시로 % 문자를 이스케이프해야합니다.
Stéphane Chazelas

@ StéphaneChazelas, 좋은 지적입니다. 나는 cron의 모든 구현에 이것을 필요로하기 때문에 백분율 기호 앞에 백 슬래시를 추가했습니다.
코드 리드

7

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

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

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

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

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


6

나는 그것에 직접적인 경험이 없지만 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 분은 어디입니까?
Philomath

fcron을 사용 @ 25 command하면 트릭을 수행해야합니다.
Caleb

고마워 Caleb. 문서에서 바로 들어 올리는 대신 맞춤형 예제를 만들어야합니다.
che2cbs

2

여기서 무엇이 문제인지 간단히 설명하겠습니다. 분 필드에 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입니다.


아마도 그 대답은 원래 질문에 대한 주석이었을 것입니다.
Philomath

1

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

  • /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


-2

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


내 지식에 따라 매분 작동합니다.

그것은 한 시간에 한 번 실행됩니다 ... 25 시간? 0/25 ... 그게 무엇인지 확실하지 않지만 OP가 무엇인지는 아닙니다.
Caleb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.