![转移 cron 任务](https://linux22.com/image/574032/%E8%BD%AC%E7%A7%BB%20cron%20%E4%BB%BB%E5%8A%A1.png)
有没有办法设置 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 设置为每隔几分钟触发一次;在大多数情况下,它会注意到时间差太小并立即退出。