Cron表达式每N分钟运行一次

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

我需要构建一个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 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

    无法基于用户输入或触发器创建cron表达式

    更好的解决方案是使用布尔标志启用或禁用cron,即在用户启动触发器时启用cron服务方法,如下所示:

    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>代码>分钟,有两个案例需要考虑:

    • n
      th分钟(60可被
      n
      整除)
    • n
      th分钟,从分钟开始
      YYYY-MM-DD HH:MM:00
      (通用)
    后一种情况是一般情况,包括60不能被
    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****被报告为非标准!在…上建议:**不适用****