每25分钟CronJob


13

我想知道是否有更简便的方法每25分钟运行一次作业。在cronjob中,如果将分钟参数指定为* / 25,则它将仅在每小时的第25和第50分钟运行

Answers:


15

使用crontab中的命令执行,/bin/sh因此您可以使用算术扩展来计算当前的分钟模25是否等于零:

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

cron将会每5分钟运行一次整个条目,但是只有当当前分钟(自纪元以来的分钟数)取模25等于零时,它才会运行your_command

正如其他人所指出的,每日1次是不是25分钟整除,所以这不会导致your_command在同一时间每天运行,但它运行每25分钟。


简直是和...可亲...
Tomas

请注意,至少使用ISC的cron实现,您需要用反斜杠转义这些%字符。
斯特凡Chazelas

@StéphaneChazelas,好点。我继续并在百分号前添加了反斜杠,因为据我所知,每次执行cron都需要这样做。
CODE READ

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

谢谢迦勒。我应该创建一个量身定制的示例,而不是直接从文档中删除一个示例。
che2cbs 2011年

2

让我简短地解释一下这是什么问题。在分钟字段中输入25将导致cron在当前时间的分钟等于25(即每小时一次)时执行。您可以输入匹配项列表,问题是60(一小时的分钟数)不能除以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

请注意,我使用/var/tmp而不是/tmp因为根据FHS,不应在系统关闭/启动时将其删除。


-2

我认为以下应该工作0 0/25 * * *?


据我所知,它将在每一分钟内起作用。

那会每隔25小时在每小时执行一次吗?0/25 ...甚至不确定这样做是什么,但不是OP的要求。
Caleb
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.