V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zjcnc
V2EX  ›  Linux

求助一个 crontab 的时间的写法

  •  1
     
  •   zjcnc · 2020-07-22 17:23:43 +08:00 · 1922 次点击
    这是一个创建于 1372 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我想要每隔 d 天 h 时 m 分 s 秒启动一次任务,参数均合法,我看了一些资料,写了*/s */m */h */d * ?
    不用想就知道错了 0.0

    13 条回复    2020-07-27 11:39:52 +08:00
    xd547
        1
    xd547  
       2020-07-22 17:27:50 +08:00
    https://crontab.guru/
    linvon
        2
    linvon  
       2020-07-22 17:30:09 +08:00
    crontab 是指定某个时间点运行,不是间隔多长时间运行,这种需求你得自己想办法实现
    zarte
        3
    zarte  
       2020-07-22 17:32:55 +08:00
    没办法,这个是定时器不是延时器。
    lovedebug
        4
    lovedebug  
       2020-07-22 17:35:23 +08:00
    crontab 有多种写法,有 5 个参数的,也有 6 个参数的,先看你使用的库使用的是哪一种写法
    brader
        5
    brader  
       2020-07-22 17:36:00 +08:00
    crontab 好像只支持到分钟级的时间粒度。
    我推荐你另一个定时器:ofelia
    DoctorCat
        6
    DoctorCat  
       2020-07-22 17:36:29 +08:00
    可以利用 cronjob 每天 h 小时 m 分 s 秒运行,然后脚本里做计数确定是否到了 day 间隔
    brader
        7
    brader  
       2020-07-22 17:39:31 +08:00
    忘记上链接了: https://github.com/mcuadros/ofelia
    ofelia 支持秒级时间粒度,以及丰富的 schedule 时间语法。
    @hourly
    @every
    0,20,40 * * * *
    等写法,但你不会 docker 的话,你可能需要花费点时间,研究怎么去安装他
    wangritian
        8
    wangritian  
       2020-07-22 17:41:18 +08:00
    把你的 d 天 h 时 m 分换算成 d*24*60+h*60+m=n 分,写成 */n * * * * 可以运行吗?秒就别想了
    brader
        9
    brader  
       2020-07-22 17:44:10 +08:00
    很抱歉前面给你列了一个错误的范例 0,20,40 * * * *
    这可能会误导你,因为 ofelia 是秒级粒度,所以它应该有 6 挡参数,正确值应该是
    0,20,40 * * * * *
    wysnylc
        10
    wysnylc  
       2020-07-22 18:23:19 +08:00
    crontab 或者说 cron 表达式,他是一个到达某个时间执行的规则而不是间隔多久执行的规则
    https://tool.lu/crontab/ 这里可以校验并测试出表达式前几次的执行时间
    zjcnc
        11
    zjcnc  
    OP
       2020-07-22 19:07:58 +08:00
    确实,每隔多久运行并不是 crontab 干的事,多谢楼上各位,换个方案会更好。
    ChanKc
        12
    ChanKc  
       2020-07-22 23:22:32 +08:00
    man 5 crontab
    ungrown
        13
    ungrown  
       2020-07-27 11:39:52 +08:00
    @zjcnc #11 或者更直接点,把间隔写进脚本,用 supervisord 之类的让其自启保持运行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5466 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 05:49 · PVG 13:49 · LAX 22:49 · JFK 01:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.