我们已经设置了一个库伯内特斯网络抓取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作业
之类的东西)。任何想法或建议都将不胜感激。谢谢!
您可以使用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作业中调用它一次