Answers:
使用crontab中的命令执行,/bin/sh
因此您可以使用算术扩展来计算当前的分钟模25是否等于零:
*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command
cron
将会每5分钟运行一次整个条目,但是只有当当前分钟(自纪元以来的分钟数)取模25等于零时,它才会运行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 command
可以解决问题。
您可以播放文件的最后修改时间
创建一个小脚本(例如/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,不应在系统关闭/启动时将其删除。