AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 770766
Accepted
Konstantin Boyandin
Konstantin Boyandin
Asked: 2016-04-16 18:48:09 +0800 CST2016-04-16 18:48:09 +0800 CST 2016-04-16 18:48:09 +0800 CST

安排作业每 23 分钟运行一次

  • 772

在某些情况下,我需要以 Cron 能够提供的更复杂的方式运行计划作业。比如说,安排一个作业每 23 或 65 分钟运行一次。

在后一种情况下,可以通过添加多个 Cron 条目来运行同一行来解决它。在第一种情况下,要添加的行数太多了。

三个明显的解决方案:

  • 每分钟运行一次该过程;使用作业自己的逻辑来推断它应该何时实际运行并将其状态保持在某个地方(例如,在文件中)
  • 在脚本中使用“sleep”暂停指定的时间,并使用像Supervisor这样的东西保持运行
  • 使用任何能够以任意周期定期运行进程的实用程序(例如监视实用程序)并使用它启动任务

但在某些情况下,它们都是不方便的。

是否有更智能的 Cron 替代品,至少可用于 POSIX 系统,能够使用任意时间表?

cron posix
  • 2 2 个回答
  • 2440 Views

2 个回答

  • Voted
  1. Best Answer
    HBruijn
    2016-04-17T05:19:01+08:002016-04-17T05:19:01+08:00

    要每 23 分钟运行一次作业,以下操作将不起作用:

    */23 * * * * /一些/命令

    因为这将在 00:00, 00:23 运行,然后在 00:46 再次运行 23 分钟,然后在 01:00 再次运行,即 14 分钟后,而不是每 23 分钟一次。

    原因是/in*/23不是数学上的“除以”,也不匹配“每当分钟数(从什么时候开始?午夜?)是 23 的倍数”。

    */23而是“增量”。这告诉 cron 匹配一组分钟(这是简写)中的每23 个项目( ) ,即 minutes 。/230 1 2 3 4 5 6 7 8 9 10 11 ... 59*0, 23 & 46

    这种增量行为还允许您移动偏移量,即通过从 1 而不是 0 开始范围:

    1-59/23 * * * * /some/command 
    

    该作业现在将每小时运行一次,过去1分钟,过去 24分钟,每小时过去47分钟。


    我同意你的评估,即对于奇怪的时间表,cron 语法是不够的。

    Cron 是一个非常简单的时间驱动调度器。

    我假设您可能希望每 23 分钟运行一次作业,因为这是批处理作业的运行时间和额外的安全裕度的总和?

    您的选择是简化您的调度需求,以便它们可以使用 cron,即每 30 分钟运行一次您的作业,或者几乎完全放弃时间驱动调度的概念并研究事件驱动调度程序。

    使用事件驱动的调度程序,一个批次的完成是自动启动下一个批次的触发器,可选地没有延迟,也不会冒使用基于时间的调度程序的风险,即批次在前一个批次完成之前开始。

    维基百科提供了一份完整的作业调度软件或工作负载自动化列表,许多供应商喜欢称其为他们的产品。

    • 4
  2. sreehack.tk
    2016-04-16T19:44:44+08:002016-04-16T19:44:44+08:00

    运行命令

    crontab -e
    

    然后,输入

    2
    

    如果它要求您提供默认编辑器然后,输入

    */23 * * * * <command here>
    

    每 23 分钟运行一次作业。将 23 替换为您想要的任何数字。

    • -3

相关问题

  • 每 4 小时运行一次 cron 的正确语法是什么?[复制]

  • 用于 mysql 数据库清理和备份的 crontab

  • Windows cron 作业

  • 使用 crontab 和 /etc/cron.hourly,daily,weekly 的区别

  • crontab ifconfig 什么都不输出

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve