我想我误解了 Kubernetes CronJobs。在 CKAD 考试中,有一个问题是每分钟运行一次 CronJob,但它应该在任意时间后开始。我没有看到 CronJobs 或 Jobs 的任何属性让它们在特定时间后启动。那应该是 cron 字符串的一部分还是我完全误解了?
4 回答
也许你误解了这个问题,如果它没有在 x 秒内完成,它就是终止工作。您应该使用.spec.activeDeadlineSeconds
来满足要求。
你可以安排你的 CronJob 在特定的日期/时间开始,而不是每分钟运行一次,或者你想设置它。有一个强大的在线工具可以帮助您。例如:
0 0/10 10/1 ? * * *
将安排您的 CronJob 从每天 10 点开始每 10 分钟运行一次。或者:
0 0/10 * ? * 6/1 *
将安排您的 CronJob 从周五开始每 10 分钟运行一次。
使用这种特定方法时要记住的重要一点是要了解集群运行的时区:
所有 CronJob
schedule:
时间都基于 kube-controller-manager 的时区。如果您的控制平面在 Pod 或裸容器中运行 kube-controller-manager,则为 kube-controller-manager 容器设置的时区决定了 cron 作业控制器使用的时区。
有关调度的更多信息/示例可以在下面找到:
你可以做类似的事情
@reboot sleep 60 && script.sh
尽管您没有具体提及启动时间。您还可以将睡眠添加到 crontab。
另一种方法是创建一个 systemd 服务(注意:在安装了 systemd 的系统上)
[Unit]
Description=cronjob with delay
After=(some criteria)
[Service]
Type=oneshot
ExecStart=/pathto/script.sh
[Install]
WantedBy=
你可以做
sleep "seconds"; echo " * * * * * command" >> path/to/crontab
我觉得这个问题的措辞可能不正确。这可能意味着每个星期六的每一分钟。
* * * * SAT
或每分钟到几小时
* 9-17 * * *