首页 > 解决方案 > 如果已经有作业在运行,如何防止在 Kubernetes 中执行 Cronjob?concurrencyPolicy:Forbid 完全停止 cron 作业执行

问题描述

我需要每 5 分钟运行一次 cron 作业。如果较早的 cron 作业仍在运行,则不应启动另一个 cron 作业。我尝试将并发策略设置为禁止,但是 cron 作业根本没有运行。

  1. 作业按预期每 5 分钟启动一次,但即使较早的 cron 作业尚未完成,它也会启动
spec:
  concurrencyPolicy: Allow
  schedule: '*/5 * * * *'
  1. 这应该可以解决问题,但是 cron 作业永远不会使用这种方法启动
spec:
  concurrencyPolicy: Forbid
  schedule: '*/5 * * * *'
  1. 将startingDeadlineSeconds 设置为3600,甚至设置为10,并没有什么不同。
spec:
  concurrencyPolicy: Forbid
  schedule: '*/5 * * * *'
  startingDeadlineSeconds: 10

有人可以在这里帮助我吗?

标签: kubernetesconcurrencycrongcloud

解决方案


来自 Kubernetes 文档

Concurrency Polic 指定如何处理由该 cron 作业创建的作业的并发执行。规范只能指定以下并发策略之一:

允许(默认):cron 作业允许同时运行的作业

禁止:cron 作业不允许并发运行;如果是运行新作业的时间并且之前的作业运行尚未完成,则 cron 作业会跳过新作业运行

替换:如果是新作业运行的时间,而之前的作业运行尚未完成,则 cron 作业将当前正在运行的作业运行替换为新的作业运行

在您的情况下,“concurrencyPolicy:Forbid”应该可以工作。如果前一个作业仍在运行,它将不允许运行新作业。在您的情况下,问题不在于 concurrencyPolicy 。

它可能与startingDeadlineSeconds 有关。你能把它删掉试试


推荐阅读