我使用kubernetes 1.21 cronjob来安排一些作业在每天的某个时间运行。
我计划在下午4点通过kubectl apply -f <name of yaml file>
运行一个作业。随后,我使用相同的命令kubectl apply -f <name of yaml file>
更新了yamlschedule: "0 22 * * *"
以在晚上10点触发作业然而,在下午1点左右应用配置后,作业仍然在下午4点触发(本不应该发生(,然后在晚上10点再次触发(预定触发时间(。
有没有解释为什么会发生这种情况,我能阻止它吗?
以下cronjob的示例yaml:
apiVersion: batch/v1
kind: CronJob
metadata:
name: job-name-1
spec:
schedule: "0 16 * * *" # 4pm
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- image: sample-image
name: job-name-1
args:
- node
- ./built/script.js
env:
- name: NODE_OPTIONS
value: "--max-old-space-size=5000"
restartPolicy: Never
nodeSelector:
app: cronjob
我预计这项工作只会在晚上10点开始。
删除cronjob并重新应用它似乎可以消除此类问题,但在某些情况下,我无法删除该作业(因为它仍在运行(。
- 当您使用
kubectl apply -f <name of yaml file>
在晚上10点安排第二个作业时,这意味着它将安排一个新作业,但不会取代现有作业。所以原因是下午4点的作业也安排好了,它运行了
相反,您需要使用以下命令将作业替换为另一个计划作业。
kubectl patch cronjob my-cronjob -p '{"spec":{"schedule": "0 22 * * *"}}'
这将仅在晚上10点运行作业。
- 要删除正在运行的作业,请使用以下进程:
在控制台中运行:
crontab -e
然后,您将使用编辑器打开crontab,只需删除其中的行,保存文件并退出编辑器即可。
如果您使用root用户运行,则使用下面的命令并按照上面的步骤进行。
sudo crontab -e