当前位置: 首页 > 知识库问答 >
问题:

答案:每n小时最多运行一次任务

邓高韵
2023-03-14

我有一个更新LetsEncrypt证书的Ansible任务。我只希望这项任务每周运行一次,以避免因重击API而受阻,但其余的任务需要每天运行-

有没有可能对一个可完成的任务进行速率限制,如果它在过去n小时内已经运行过,那么它将被跳过?

我能想到的最好的方法是,如果任务已运行,则触摸文件,如果文件存在并且比某个时间戳更新,则跳过任务 —

我确实想过在<code>ansible中对任务应用标记,并将标记标记为默认跳过。cfg</code>,然后每周只在启用该标记的情况下运行一次,但<code>是可行的。cfg似乎覆盖了--tags,而不是相反。

共有1个答案

曾德水
2023-03-14

您可以通过CRON执行Bash脚本来运行剧本,类似于:

#!/usr/bin/env bash

DAY=$(date +%u)
HOUR=$(date +%k)

# This only runs all tasks (including letsencrypt) if it's 1 AM on Monday, at 
# all other times letsencrypt will be omitted. 
if [[ $(($DAY)) -eq 1 && $(($HOUR)) -eq 1 ]]; then
        echo "ansible-playbook [...]"
else
        echo 'ansible-playbook [...] --tags "!letsencrypt"'
fi

然后,您必须用letsencrypt标记您的任务。然后,它将只在脚本中设置的任何特定时间与所有其他任务一起运行,否则将被跳过。cronjob本身仍然可以每小时运行一次。

另一种方法是在剧本中使用< code>ansible_date_time。这样,你就不需要拐杖了。请参见以下简单的行动手册示例。

- hosts: localhost
  pre_tasks:

    - name: Get current weekday.
      set_fact:
        weekday: "{{ ansible_date_time.weekday }}"

    - name: Get current hour.
      set_fact:
        hour: "{{ ansible_date_time.hour }}"

  tasks:

    - debug:
        msg: "Replace this task with your Let's Encrypt task."
      when:
        - weekday is match("Thursday")
        - hour is match("22")

也许看看这篇关于在 Ansible 中使用日期/时间和其他可能的输出格式的文章。

 类似资料:
  • 大家好,耶稣受难节, 我知道这似乎是一个重复的问题,但事实并非如此,我将向您解释原因: 有几种方法可以在计划的时间执行任务,如TimerTask或ScheduleExecutorService,但它们都不适合我要做的事情,因为这些方法都是这样工作的: -- 但我不希望我的代码在计划时间后一次又一次地运行,我希望我的代码总是在每个计划时间执行,即使是第一次。 还有一个问题:如果android停止后台

  • 问题内容: 如何控制/限制提交给的任务?我已经发送了SMS消息,并且我需要控制执行程序,以便它最多只能以每秒N条消息的速度发送。 问题答案: 假设您为每个任务创建一条SMS消息,则可以使用ScheduleExecutorService。 将任务添加到队列中,它们将以每秒10个的速度处理。

  • 我使用taskscheduleR来运行我的R代码。我必须运行一次的那个运行得很好,但是其他的(每小时、每周、每天等等)都不行。)工作,尽管其余报告“成功:已成功创建计划任务“test2” 这是我用来运行一次的代码(工作正常): 这是我用来运行WEEKLY的代码(不起作用): 在这种情况下没有生成日志,看起来任务从未计划过。 类似于每小时(不起作用):库(taskscheduleR)myscript

  • 问题内容: 我有一个ajax javascript方法,可从页面等中提取数据。 我希望此过程按一定的时间间隔运行,例如每分钟。但是我不希望它永远循环,所以最多可以循环3次。 实现此目的的最佳方法是什么? 问题答案: 像这样:

  • 我试图创建10个线程,每个线程运行100.000次。因此,我做了一个循环,循环每一个线程。它应该每次递增静态x+1。

  • 在我问之前,Cron作业和任务调度程序将是我的最后选择,这个脚本将在Windows和Linux中使用,我更喜欢有一个编码的方法来完成这个任务,而不是把它留给最终用户来完成。 有没有Python的库可以用来安排任务?我需要每小时运行一次函数,但是,随着时间的推移,如果我每小时运行一次脚本并使用. chat,“每小时一次”将在不同的时间运行由于执行/运行脚本和/或函数固有的延迟,一小时与前一天不同。