Cron-每分钟运行一次作业,但第一次执行是在启动后 5 分钟

Cron-每分钟运行一次作业,但第一次执行是在启动后 5 分钟

所以我的问题如下,我需要每分钟运行一个作业(我们称之为作业 A),但在执行之前,我需要启动服务器并执行其他操作。我的意思是,一旦完成所有这些执行,我需要每分钟运行作业 A。

我的 crontab 如下所示:

@reboot first-required-job.sh
@reboot second-required-job.sh
@reboot third-required-job.sh

我的想法是让 job-A 的第一次执行在启动 5 分钟后开始,以确保所有前面的流程都完成,然后每分钟运行一次。

如果我做了类似的事情

@reboot (sleep 300; job-A.sh)

它只会在启动后运行一次。

一定有一个简单的方法可以做到这一点,但我不知道。我该怎么做?

答案1

一定有一个简单的方法可以做到这一点

在我看来,您的sleep 300解决方案已经是一种简单的方法。它并不干净,因为其他作业可能需要超过 300 秒。但这是一种简单的方法。

我的一个干净的解决方案是让其他脚本在完成后创建一个文件。这样,作业 A 只需检查该文件是否存在,就能知道先决条件是否满足。

我将把其他 3 个脚本包装成一个新脚本,例如。job-A-preconditions.sh该脚本将如下所示:

#!/bin/bash
/path/first-required-job.sh
/path/second-required-job.sh
/path/third-required-job.sh
touch "/tmp/very-unique-filename-to-signal-job-A-can-start"

crontab 看起来如下:

# run the preconditions job only once after boot
@reboot /path/job-A-preconditions.sh

# run job-A every minute
* * * * * test -f "/tmp/very-unique-filename-to-signal-job-A-can-start" && /path/job-A.sh

笔记:在先决条件作业开始之前,信号文件会自动删除,这一点很重要。如果您的 /tmp/ 使用临时文件(又名 ramdrive)。如果您已systemd-tmpfiles-clean.service启用,/tmp/ 会在关机前被清理,因此这也可以正常工作。

另请注意:豪华版将对所有涉及的作业使用 systemd,并且仅使用 systemd 的依赖机制。

相关内容