25분마다 작업을 실행하는 더 쉬운 방법이 있는지 궁금합니다. cronjob에서 분 매개변수를 */25로 지정하면 매시간 25분과 50분에만 실행됩니다.
답변1
crontab의 명령은 crontab에서 실행되므로 /bin/sh
산술 확장을 사용하여 현재 분 모듈로 25가 0과 같은지 계산할 수 있습니다.
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
전체 항목은 5분마다 실행되지만 현재 분(에포크 이후의 분 수) 모듈로 25가 0과 같은 경우에만 실행됩니다 your_command
.
다른 사람들이 지적했듯이 하루는 25분으로 나누어지지 않으므로 your_command
매일 같은 시간에 실행되는 것은 아니지만~ 할 것이다25분마다 실행됩니다.
답변2
가장 좋은 방법은 20~30분 동안 달리는 것입니다.
차선책은 아마도 5분마다 트리거한 다음 내부 카운트 또는 타임스탬프를 유지하고 5번의 트리거마다 실행하거나 마지막 실행 후 25분이 경과한 경우 실행하는 것입니다.
더 복잡한 것은 자정부터 시작하여 하루 중 정확한 시간을 파악하고 하루가 끝날 때 오류를 받아들이는 것입니다. 여기에는 crontab 항목을 다른 시간으로 복사하는 작업이 포함됩니다.
이보다 더 복잡한 것은 한 달 전체의 시간을 계산하는 것인데, 여기에는 다양한 조합을 다루기 위해 많은 crontab 항목 복사본이 필요합니다.
마지막으로, 자신만의 Always-On 데몬을 구현하고 스케줄링을 수행하도록 할 수 있습니다.
답변3
직접적인 경험은 없지만플루론상자 밖에서 원하는 것을 수행하는 것 같습니다. 그것에 따르면문서빈도를 지정할 수 있습니다.
# 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
답변4
파일이 마지막으로 수정된 시간으로 재생할 수 있습니다.
/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
내가 /var/tmp
대신 /tmp
에 사용한다는 점에 유의하십시오.FHS시스템 종료/시작 시 삭제하면 안 됩니다.