【问题标题】:How to set up cron to run once a day at random times如何设置 cron 每天随机运行一次
【发布时间】:2017-12-12 17:22:24
【问题描述】:

嗨,现在我有一个基本的 cron,它每天在 1 点和 6 点运行我的东西两次。类似于:

H 1,18 * * *

问题是我现在有 100 件事情开始了,这堵塞了我的机器。我想每天为每个作业随机生成一次运行时间。如果5-7个同时去也没关系。所以我想我的问题是。一方面,这可能吗?如果是这样,是否有最佳实践?我正在用 groovy 加载所有内容,所以我只是想生成一个 1-24 之间的数字并将其添加到此:

cron('H 1,18 * * *')

如果可能的话。但我觉得这仍然会阻塞我,因为我有很多事情要开始。

【问题讨论】:

    标签: jenkins groovy cron dsl


    【解决方案1】:

    我选择了这个:

    H H(0-7) * * *
    

    这似乎给了它一个 12 到 7 之间的随机时间,这对我有好处。您还可以执行以下操作:

        def rand = Math.abs(new Random().nextInt() % 24) + 1;
        triggers {
            githubPush()
            cron('H ' + rand + ' * * *')
        }
    

    但我所做的工作似乎额外。

    【讨论】:

      【解决方案2】:

      嗯,没有语法可以完全做到我所知道的(尽管你可以在 bash 中编造一些杂物,这样每晚都会自动重新生成 crontabs)。但真的为什么呢??您不需要根据您的描述每天生成随机时间。您需要将其随机化一次并将这些随机时间写入您的 crontab。

      所以,掷骰子,或者使用一些基本的 rnd 数字生成器。或者,更好的是,将它们均匀分布——比如你每小时在你的 contab 中启动几个进程。为什么你需要更详细的东西?反正就是这样完成的..

      【讨论】:

      • 这就是为什么我要求我在 groovy 中实现它。但我很好奇是否有更好的做法/标准。不过听起来不像。
      【解决方案3】:

      我不知道您是否真的可以使用 cron 来执行此操作,但如果您可以访问 systemd Timers and services (至少几年前它们通常在现代 Linux 中可用),您也许可以陪审团构建一个基于计时器的系统。

      抛出一个随机休眠并返回零的小型 shell 脚本,或者甚至只是使用计时器来延迟启动时的东西。

      【讨论】:

        【解决方案4】:

        来自詹金斯文档:

        In addition, @yearly, @annually, @monthly, @weekly, @daily, @midnight, and @hourly are supported as convenient aliases. These use the hash system for automatic balancing. For example, @hourly is the same as H * * * * and could mean at any time during the hour. @midnight actually means some time between 12:00 AM and 2:59 AM.
        

        所以你可以使用@daily

        【讨论】:

          猜你喜欢
          • 2015-07-15
          • 1970-01-01
          • 2011-09-29
          • 2019-02-28
          • 2013-05-28
          • 2021-04-03
          • 2014-08-14
          • 2023-01-17
          • 2012-02-14
          相关资源
          最近更新 更多