Cron表达式每N分钟运行一次
我需要构建一个cron表达式,以便在用户单击开始按钮后每10分钟运行一次作业 我试着做一些类似的事情:Cron表达式每N分钟运行一次,cron,Cron,我需要构建一个cron表达式,以便在用户单击开始按钮后每10分钟运行一次作业 我试着做一些类似的事情: 0 42/10 * * * ? * 而42/10就像用户单击开始于hh:42(例如:18h42)。下一个时间表如下: 1. Friday, March 20, 2015 6:42 PM 2. Friday, March 20, 2015 6:52 PM 3. Friday, March 20, 2015 7:42 PM 4. Friday, March 20, 2015 7:52 P
0 42/10 * * * ? *
而42/10就像用户单击开始于hh:42(例如:18h42)。下一个时间表如下:
1. Friday, March 20, 2015 6:42 PM
2. Friday, March 20, 2015 6:52 PM
3. Friday, March 20, 2015 7:42 PM
4. Friday, March 20, 2015 7:52 PM
5. Friday, March 20, 2015 8:42 PM
问题是在第二次执行之后,作业会等待一个小时来执行下一次执行。如何构建一个cron表达式,该表达式立即启动,但在N分钟后仍然运行
提前谢谢。我认为你的格式不对。字段的顺序为:
Minute
为0,您的Hour
无效(Hour
必须在0-23
范围内)。我猜cron忽略了不正确的小时
,并且每小时运行分钟0
但是,如果确实希望每N分钟运行一次,则可以使用以下格式(其中N小于60):
但是,请记住,/N
在当前小时内每隔N分钟重复一次命令。因此,如果crontab中有0/33
,则命令将在以下位置运行:
- 00:00
- 00:33
- 01:00
- 01:33
- 00:00
- 00:33
- 01:06
- 01:39
public static boolean cronEnabled = false;
public cronServiceMethod(){
if(cronEnabled){
// Keep your logic here
}
}
// Call this method when user clicks the Start button
public enableCron(){
cronEnabled = true;
}
public disableCron(){
cronEnabled = false;
}
0 0/10 * * * ?
就cron而言,每10分钟运行一次,如下所示:
public static boolean cronEnabled = false;
public cronServiceMethod(){
if(cronEnabled){
// Keep your logic here
}
}
// Call this method when user clicks the Start button
public enableCron(){
cronEnabled = true;
}
public disableCron(){
cronEnabled = false;
}
0 0/10 * * * ?
如果你想运行一个CRON,每一个代码< n>代码>分钟,有两个案例需要考虑:
- 每
th分钟(60可被n
整除)n
- 每
th分钟,从分钟开始n
(通用)YYYY-MM-DD HH:MM:00
n
整除的情况。有人提到,这种情况需要一个“开始时间”。用一些简单的数学,你很快就会明白这是为什么
每n
th分钟(60可被n
整除)
为此,我们使用定义范围和步长值的组合:
man 5 crontab
:阶跃值可与范围一起使用。在带有/
的范围之后指定
数字在整个范围内的值。例如,可以使用0-23/2
在“小时”字段中,指定每隔一小时执行一次命令
(V7标准中的备选方案为:
0,2,4,6,8,10,12,14,16,18,20,22
)。阶跃值也是允许的
星号之后,因此如果指定每两小时运行一次作业,
您可以使用*/2
请参见以下示例:
# 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/n * * * * command1
在这里,command1
将从m到59每隔n分钟执行一次
这意味着:
- 如果
,则它们将始终间隔mn
分钟,但在 一小时的开始。 例如n
:作业将在m=12,n=10
12,22,32,42,52分钟内运行。在这里,我们有一个20分钟的跳跃,从第52分钟到第12分钟
n
不能完美地除以60,您将遇到问题。例如,m=0,n=11
在0,11,22,33,44,55
上运行,因此我们只有5分钟的时间进行下一次运行,而不是11分钟
每n
th分钟,从分钟开始YYYY-MM-DD HH:MM:00
这种情况是通用的,涵盖了60的不可整除性
在这里,它变得更加有趣,需要采取不同的方法。当您从给定的一天开始使用连续计数器时,可以解决此问题。输入UNIX时间戳,即自1970-01-01 00:00:00 UTC以来的总秒数。假设我们想从McFly抵达Riverdale的那一刻开始:
% date -d '2015-10-21 07:28:00' +%s
1445412480
对于在'2015-10-21 07:28:00'之后每7分钟运行一次的cronjob,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
* * * * * mintestcmd "2015-10-21 07:28:00" 7 && command2
将mintestcmd
定义为
#/usr/bin/env bash
开始时间=$(日期-d“$1”+%s)
#返回UTC时间
现在=$(日期“+%s”)
#获取分钟数
增量=$((现在-开始时间)/60))
#设模
模=2美元
#做测试
((增量%模==0))
备注:UNIX时间以UTC为单位。如果您的cron运行在受夏令时影响的不同时区,建议不要在2点到3点之间运行该命令。这可能会跳过命令或运行命令两次(取决于时间是向前跳还是向后跳)
备注:UNIX时间不受闰秒的影响
备注:cron
没有亚秒精度我发现这一点非常好:我们几乎可以获得所有可能的调度选项:
请参考上面的示例屏幕截图,它真正的视觉控制和自我解释,以生成任何cron表达式 如果确实需要在用户提供的开始时间之后每隔10分钟启动一次作业,则需要进行计算并相应地生成crontab条目。i、 e.您可以使用多个以逗号分隔的数字。这将每小时运行三次,时间分别为0、10和20分钟:0、10、20****[命令]您所说的“用户单击开始按钮后”是什么意思?0/N****被报告为非标准!在…上建议:**不适用****