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

如何在一定次数的重试后使(cron)作业失败?

宰父志新
2023-03-14

我们已经设置了一个库伯内特斯网络抓取cron作业集群。在cron作业开始失败之前,一切似乎都很顺利(例如,当站点结构发生变化并且我们的抓取器不再工作时)。看起来偶尔会有一些失败的cron作业会继续重试,直到它导致我们的集群崩溃。运行kubectl get cron的(在集群失败之前)会显示有太多作业正在为失败的作业运行。

我试图遵循这里描述的关于pod退避失败策略的已知问题的注释;然而,这似乎不起作用。

以下是我们的配置供参考:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: scrape-al
spec:
  schedule: '*/15 * * * *'
  concurrencyPolicy: Allow
  failedJobsHistoryLimit: 0
  successfulJobsHistoryLimit: 0
  jobTemplate:
    metadata:
      labels:
        app: scrape
        scrape: al
    spec:
      template:
        spec:
          containers:
            - name: scrape-al
              image: 'govhawk/openstates:1.3.1-beta'
              command:
                - /opt/openstates/openstates/pupa-scrape.sh
              args:
                - al bills --scrape
          restartPolicy: Never
      backoffLimit: 3

理想情况下,我们更希望cron作业在N次重试后终止(例如,在my-cron-作业失败5次后,kubectl删除cron作业my-cron作业之类的东西)。任何想法或建议都将不胜感激。谢谢!

共有1个答案

公孙栋
2023-03-14

您可以使用backoffLimit告诉作业停止重试。

指定标记此作业失败之前的重试次数。

在你的情况下

spec:
  template:
    spec:
      containers:
        - name: scrape-al
          image: 'govhawk/openstates:1.3.1-beta'
          command:
            - /opt/openstates/openstates/pupa-scrape.sh
          args:
            - al bills --scrape
      restartPolicy: Never
  backoffLimit: 3

您将3设置为作业的退避限制。这意味着当CronJob创建作业时,如果失败,它将重试3次。这控制作业,而不是CronJob

当作业失败时,将再次创建另一个作业作为您的计划时间段。

你想:如果我没有错,你想停止计划新作业,当你计划的作业失败5次时。正确的

答:在这种情况下,这是不可能自动实现的。

可能的解决方案:您需要挂起Cron作业,以便它停止调度新作业。

Suspend: true

您可以手动执行此操作。如果您不想手动这样做,您需要设置一个观察器,它将观察您的CronJob状态,并在必要时将CronJob更新为suspend。

 类似资料:
  • 问题内容: 我有一个cron作业,现在将其输出重定向到文件中。看起来如下 有人可以帮助我将其输出重新分配到stdout吗? 问题答案: 在任何终端上输入,我们将获得该特定终端窗口的设备文件,例如。将cron作业重新命名为该文件

  • 我有一个带有cron作业spring boot项目。作业只应运行一次。它应该再次触发,只有当应用程序崩溃或应用程序重新启动。对此有什么cron表达式吗?或者有什么办法可以实现这一点?

  • 问题内容: 我希望添加一个条目,以每隔30分钟,每小时的零零几点和接近小时的30分钟执行一次脚本。我有以下内容,但它似乎无法在0上运行。 我需要使用什么字符串? cron在OSX上运行。 问题答案: 做:

  • 我不熟悉使用cron job。我甚至不知道怎么写。我试着在网上搜索,但还是不太懂。我想创建一个cron作业,它每分钟都会执行我的代码。我正在使用PHP创建它。它不起作用。 示例 run.php(每分钟都会执行的代码) cron.php 假设这两个文件在同一个文件夹中。 是我做错的代码吗?如果有问题,请告诉我如何解决。

  • 我试图在节点JS中的另一个cron作业中运行一个cron作业。外部cron作业在第1天只执行一次:内部cron作业在第2天执行1次:内部cron作业在第3天执行2次:内部cron作业执行3次 为什么它要多次执行,尽管我在cron作业中调用它一次