每 15 分钟 + 在特定时间在一行中运行 crontab?

每 15 分钟 + 在特定时间在一行中运行 crontab?

简而言之,我需要用一行来完成此操作:

0,15,30,45  * * * * my_command
50,55      23 * * * my_command

我想在午夜前每 15 分钟运行一次命令 + 额外运行两次。是否可以在一个 crontab 中完成此操作?

答案1

Cron 本质上是一个非常简单的调度程序。

您目前正在做的事情是编写两个不同的计划,将它们结合起来实现比本机 cron 语法支持的更复杂的计划,这通常是最好的解决方案。

这是一个直观的解决方案,其他管理员也可以轻松阅读和理解。

另一个解决方案是简单地安排你的工作更频繁地运行。

然后,您应该在您的作业中构建额外的逻辑(或实际作业周围的 shell 脚本包装器),检查运行该作业的条件是否合适(这些条件可能比仅仅检查时间要复杂得多),如果条件不合适,则正常退出。

这种方法,即在开始实际工作之前检查作业开始时条件是否合适,如果条件不合适则正常退出,如果操作正确,可以成为一种非常强大的解决方案,解决 CRON 通常无法解决的一系列潜在问题。(
例如,在高频批处理作业中,常见的检查是防止多个计划的批处理同时运行,因为突然一个批处理的处理时间比预期的要长得多,并且在 cron 安排下一次迭代之前无法完成。)

伪代码如下:

一个 cron 任务:

 * * * * * *  /path/to/wrapper_for_my_job

 #!/bin/your-favourite-scripting-language
 # wrapper_for_my_job: only execute my_job when the time is right


 if current_time == [0,15,30,45 minutes past the hour]
    then 
        my_job
 else if current_time == [23:50 ETC OR 23:55 UTC]
     then 
         my_job
 else
      exit 0

答案2

您可以尝试此命令:
*/15 * * * * /path/to/command
如果它适用于特定用户,那么您可以将其作为 */15 * * * * USER /path/to/command 运行

答案3

您可以每 0、15、30、45、50、55 运行一次 cron,并在 cron 开始时添加时间检查。

否则,我不认为这是不可能的,因为几乎没有动力去支持比添加第二行更好的复杂语法。

相关内容