如果您想每隔
n
分钟运行cron作业,取决于
n
的值,有几种可能的选项。
n
可以被60整除(1、2、3、4、5、6、10、12、15、20、30)
在这种情况下,可以简单地使用
/
符号解决问题。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
m-59/n * * * * command
上述代码中,n
代表值n
,m
表示小于n
或*
的值。这将在每个分钟执行命令m,m+n,m+2n,...
n
不能整除60
如果n
不能整除60,就无法使用cron清洁地完成此操作,但是可以实现。要做到这一点,需要在cron中放置一个测试来检查时间。最好在查看UNIX时间戳时执行此操作,即自1970-01-01 00:00:00 UTC
以来的总秒数。假设我们希望在Marty McFly抵达Riverdale时首次运行该命令,然后每隔n
分钟重复一次。
% date -d '2015-10-21 07:28:00' +%s
1445412480
要让定时任务在“2015-10-21 07:28:00”之后的每个第42
分钟运行,crontab应该是这样的:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
* * * * * minutetestcmd "2015-10-21 07:28:00" 42 && command
如果定义了minutetestcmd
#!/usr/bin/env bash
starttime=$(date -d "$1" "+%s")
now=$(date "+%s")
minutes=$(( (now - starttime) / 60 ))
modulo=$2
(( now >= starttime )) && (( minutes % modulo == 0 ))
备注:UNIX时间不受闰秒的影响。
备注:cron
没有亚秒精度。
cromail.php
还是cronmail.php
? - Biffen