V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huaxianyan
V2EX  ›  iPhone

请教一下,自动化如何才能实现每三天执行一次呢?

  •  
  •   huaxianyan · 2024-04-17 10:22:13 +08:00 · 9636 次点击
    这是一个创建于 371 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在的自动化里重复只有每天每周和每月,但是明明其他地方的重复是可以支持每隔 3 天这种方法的

    有没有办法曲线实现每隔三天执行一次自动化呢?

    第 1 条附言  ·  2024-04-17 13:16:47 +08:00
    我建议点进帖子的各位先看看这是哪个分区,我以为选择了分区就不需要详细说明了

    我详细阐述一下我的问题,是想问 iOS 上快捷指令里的自动化如何每三天执行一次
    第 2 条附言  ·  2024-04-17 13:18:00 +08:00
    另外问题已经解决,感谢楼里给出方法以及思路的朋友,非常感谢

    如果有同样需求的可以自己爬下楼
    28 条回复    2024-04-18 01:54:52 +08:00
    yzding
        1
    yzding  
       2024-04-17 10:29:02 +08:00 via iPhone
    每天执行一次,然后判断当前日期是否是 3 的倍数?
    facebook47
        2
    facebook47  
       2024-04-17 10:30:19 +08:00 via Android
    每 72 小时🐶
    huaxianyan
        3
    huaxianyan  
    OP
       2024-04-17 10:53:48 +08:00
    @yzding 是只判断日吗,那这样月初月尾衔接的时候应该会有意外
    @facebook47 这个要如何设置呢?自动化的特定时间里重复没有每 72 小时选项
    zsj1029
        4
    zsj1029  
       2024-04-17 10:57:07 +08:00
    crontab 了可以设置*/3 每三小时,同理可以设置三天
    一楼也说了思路,每天的话,程序判断三天。
    既然执行任务,可以看看有没有持久化记录上次执行时间,然后看看是否满足三天间隔
    icestraw
        5
    icestraw  
       2024-04-17 11:02:24 +08:00
    你自己用 每天执行一次,然后时间戳把毫秒转换成天,然后再 mod3
    huaxianyan
        6
    huaxianyan  
    OP
       2024-04-17 11:03:03 +08:00
    @zsj1029 这个思路有尝试过,但是对比日期这块卡住了,想每次执行的时候把时间写到本机的一个文本内,然后下次执行的时候读取进行对比,不过读和写试了很多项都不对
    dingdangnao
        7
    dingdangnao  
       2024-04-17 11:09:37 +08:00
    写个接口 自己做逻辑判断 每三天返回 1 其他时间返回 0
    自动化每天运行 从接口读 😂
    Diphia
        8
    Diphia  
       2024-04-17 11:13:51 +08:00
    @huaxianyan 既然都写文件了,那不如直接写 unixtimestamp ,然后每次看差值到 3 * 24 * 60 * 60 了没有。这样会一直稍微延后一点,或者你设定一个最初的时间去和它的 timestamp 对比
    ho121
        9
    ho121  
       2024-04-17 11:16:40 +08:00 via Android
    sleep 3*24*60*60
    zsj1029
        10
    zsj1029  
       2024-04-17 11:19:36 +08:00
    @huaxianyan 简单逻辑,每天执行,计算执行次数每次+1 ,然后%3 取余
    1 、获取本地文件执行次数 count
    2 、count+=1
    3 、如果 count%3=0 ,执行逻辑代码
    4 、最后 count 的次数再次写入本地文件
    xiaociwei
        11
    xiaociwei  
       2024-04-17 11:20:17 +08:00
    设置最早跑的日期为常量,然后后续算日期天数差能被 3 整除的 就跑
    xiaooloong
        12
    xiaooloong  
       2024-04-17 11:22:20 +08:00
    每天执行,每次把写入的整数 +1 ,轮到 3 的倍数执行真正需要的操作
    F7TsdQL45E0jmoiG
        13
    F7TsdQL45E0jmoiG  
       2024-04-17 11:31:05 +08:00
    在 10:00 AM, 每 3 天 、00 10 */3 * *
    coolloves
        14
    coolloves  
       2024-04-17 11:31:09 +08:00
    刚好之前也有这种需要,有个 shell 脚本 可以参考下


    ```
    start_interval=432000
    end_interval=518400


    start_date=$(date -d '2024-02-04 02:00' +%s)
    now=$(date +%s)
    cycle=$(( (now - start_date) / 432000 ))
    [ $cycle -lt 1 ] && cycle=1
    cycle_start=$(( start_date + cycle * 432000 ))
    cycle_end=$(( cycle_start + start_interval ))


    if [ $((now - cycle_start)) -gt 0 ] && [ $((now - cycle_start)) -lt 80000 ];then
    command
    fi
    ```
    c6h6benzene
        15
    c6h6benzene  
       2024-04-17 11:32:57 +08:00 via iPhone
    跟固定锚点比时间差取余就好了?上面提到的 unix 时间戳正好。
    wweerrgtc
        16
    wweerrgtc  
       2024-04-17 11:35:03 +08:00
    快捷指令中有获取两个日期中的差值的选项

    用这个应该很好实现
    anoninz
        17
    anoninz  
       2024-04-17 11:39:53 +08:00
    每天执行一次,写一个判断(当天与某个写死的特定日子相隔天数是否能被三整除)
    gdfsjunjun
        18
    gdfsjunjun  
       2024-04-17 11:41:21 +08:00
    记录时间戳,每天运行,看是否相差大于三天的秒数不就好了
    huaxianyan
        19
    huaxianyan  
    OP
       2024-04-17 11:58:19 +08:00
    @c6h6benzene
    感谢,这个方法成功了,锚了一个时间计算间隔时间,然后除以 3 以余数来判断,算是曲线实现了
    wclebb
        20
    wclebb  
       2024-04-17 12:09:22 +08:00
    好像可以放在日期(就是日历那个)上执行。
    然后日历上用重复来实现你的目的。
    CivAx
        21
    CivAx  
       2024-04-17 12:12:25 +08:00
    正好我之前写过这个:
    -----
    格式化日期:格式化 2024 年 1 月 1 日(或任何你希望的起始日期)
    从输入中获取日期:从 (格式化日期) 获取日期
    获取日期之间的时常:获取 (当前日期) 到 (起始日期) 之间的时长,单位为 (天)
    获取变量:获取 (日期之间的时常)
    计算结果:(日期之间的时常) ÷ 3
    为数字取整:将 (计算结果) 取整到个位
    如果:如果 (取整后的数字) (是) (计算结果) # 等于判断是否 (计算结果) 有小数,如果能整除则为真
    -- 则执行操作
    否则
    -- 结束条件
    ----
    这个之前是写给某个需要隔 3 天服用的药品用的。这里用的判断是,判断 “执行日” 距离 “起始日(初次服药日)” 是否为 3 ,或能被 3 整除,如果为真,那么就代表隔了 3 天到了下一个服药日;如果不能整除 —— 也就是 “计算结果” 与 “为数字取整” 不全等,那么代表间隔日不足 3 天。

    这个方法不存在闰年 Bug 。
    buf1024
        22
    buf1024  
       2024-04-17 12:18:37 +08:00
    cron tab
    pipilu
        23
    pipilu  
       2024-04-17 12:19:20 +08:00
    执行的时候逢三 return
    YGHMXFAL
        24
    YGHMXFAL  
       2024-04-17 12:21:57 +08:00
    sleep "$((3*24*60*60))"

    (别打我)
    YGHMXFAL
        25
    YGHMXFAL  
       2024-04-17 12:22:40 +08:00
    @YGHMXFAL 把它包在 while true 内部
    googol2chen
        26
    googol2chen  
       2024-04-17 13:04:23 +08:00
    每年执行一次呢?
    allegory
        28
    allegory  
       2024-04-18 01:54:52 +08:00 via iPhone
    @huaxianyan 10 位时间戳除以 86400 不就可以得到天了嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1008 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:19 · PVG 03:19 · LAX 12:19 · JFK 15:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.