如何设置cron在随机时间每天运行一次

问题描述 投票:3回答:4

嗨所以现在我有一个基本的cron,每天两次在1和6运行我的东西。像:

H 1,18 * * *

问题是我有100件事情在这个时候开始,这堵塞了我的机器。我想每天为每个作业随机生成一次时间。如果5-7一下子就可以了。所以我想我的问题是。一个是可能的吗?如果是这样,最好的做法是什么?我在groovy中加载所有内容所以我只是想在1-24之间生成一个数字并将其添加到此:

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

如果那是可能的。但我觉得这样的事情仍然会让我感到困扰,因为我开始了这么多事情。

jenkins groovy cron dsl
4个回答
2
投票

我跟着这个:

H H(0-7) * * *

这似乎是给它一个12到7之间的随机时间,这对我有好处。你也可以这样做:

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

但似乎是我工作的额外。


1
投票

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

所以,滚动一些骰子,或使用一些基本的rnd数字生成器。或者,更好的是,统一分配它们 - 比如每小时你开始触摸一些过程。为什么你需要更复杂的东西?无论如何它就是这样做的..


0
投票

我不知道你是否可以用cron实际做到这一点,但是如果你有权访问systemd Timers and services (并且它们通常可以在现代Linux中使用至少几年),你可能可以陪审团定时器基于系统。

抛出一个随机睡眠并返回零的小shell脚本,甚至只是使用定时器来延迟启动时的内容。


0
投票

来自jenkins docs:

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

© www.soinside.com 2019 - 2024. All rights reserved.