转移 cron 任务

转移 cron 任务

有没有办法设置 cron 作业以一小时一分钟的间隔运行?例如 12:00、13:01、14:02、15:03 等等,无限期地运行。当它再次到达 12 点时,它应该在 12:24 执行作业,下一个作业在 13:25 执行。

答案1

尝试 at 命令。

at +61m < commands.list

命令列表:doupdate.sh 位于 +61m < 命令列表

当然,您需要使用文件的完整路径。每次运行时,它都会设置 61 分钟后的下一个作业。

您可以运行“atq”来查看当前排队的内容。

答案2

查看克隆它适用于大多数发行版并且更适合这类任务。

答案3

Cron 不是适合此目的的工具。cron 的问题在于它无法在作业执行之间保留状态。众所周知,它不知道作业之前是否成功运行过,作业在下次执行之前是否仍在运行等。如果您试图像这样巧妙地安排时间,则不应依赖 cron。

更好的选择是研究您使用的语言中可用的任务调度工具。您基本上需要一个知道任务上次运行状态的进程,特别是上次成功执行的时间。是的,这将导致在后台运行一个额外的守护进程,但这可能比在 cron 中实现相同功能的某些黑客方式更容易维护。

答案4

Cron 并不能完全解决您的问题;您必须维护一些外部状态来追踪您的作业上次运行的时间。

其中一种方法是按照@cjc 所建议的 - 运行一个负责处理调度本身的额外守护进程。

另一种方法是让您的作业记录其运行的时间;并且每次 Cron 触发它时,如果上次运行时间太近,则拒绝启动。这可以很简单,只需在每次成功执行结束时触摸名为“lastrun”的文件,然后在下次执行开始时检查该文件上的时间戳即可。然后,您可以将 cronjob 设置为每隔几分钟触发一次;在大多数情况下,它会注意到时间差太小并立即退出。

相关内容