简而言之,我需要用一行来完成此操作:
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 开始时添加时间检查。
否则,我不认为这是不可能的,因为几乎没有动力去支持比添加第二行更好的复杂语法。