linux计划任务永不超时,从一次Linux计划任务不执行的问题排查过程说起

Cron是*nix系统中用于定时任务的守护进程,但不处理错过执行的任务。Anacron通过文件时间戳跟踪任务执行,弥补了cron的不足,确保在系统关机期间错过的任务在开机后得以执行。此外,许多软件如apscheduler和kubernetes在设计时考虑了这些复杂场景,确保任务的可靠执行。
摘要由CSDN通过智能技术生成

关机了 cron job 怎么办,开机后还会再执行吗?

https://mp.weixin.qq.com/s/B8Lgiw69Z_Fi46019eCTJg

`

Cron 是 *nix 系统中常见的有一个 daemon,用于定时执行任务。cron 的实现非常简单,以最常用的 vixie cron 为例,大概分为三步:

1. 每分钟读取 crontab 配置

2. 计算需要执行的任务

3. 执行任务,主进程执行或者开启一个 worker 进程执行

Cron 的实现每次都是重新加载 crontab,哪怕计算出来下次可执行时间是 30 分钟之后,也不会说 sleep(30),这样做是为了能够在每次 crontab 变更的时候及时更新。

cron 是没有运行记录的,并且每次都会重新加载 crontab,所以总体来说 cron 是一个无状态的服务。

在大多数情况下,这种简单的机制是非常高效且稳健的,但是考虑到一些复杂的场景也会有一些问题,包括本文标题中的问题:

1. 如果某个任务在下次触发的时候,上次运行还没有结束怎么办?

2. 当系统关机的时候有任务需要触发,开机后 cron 还会补充执行么?

3. 如果错过了好多次执行,那么补充执行的时候需要执行多少次呢?

Unix 上传统的 cron daemon 没有考虑以上三个问题,也就是说错过就错过了,不会再执行。为了解决这个问题,又一个辅助工具被开发出来了——anacron, ana 是 anachronistic(时间错误) 的缩写。anacron 通过文件的时间戳来追踪任务的上次运行时间。具体的细节就不展开了,可以参考文章后面的参考文献。

总之,如果只有 cron,那么不会执行错过的任务,但是配合上 anacron,还是有机会执行错过的任务的。

定时执行任务是一个普遍存在的需求,除了在系统层面以外,多种不同的软件中都实现了,我们可以认为他们是广义的 cron。这些广义的 cron 大多考虑了这些问题,下面以 apscheduler 和 kubernetes 为例说明一下。

`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值