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 * * *?