请教一下,自动化如何才能实现每三天执行一次呢? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huaxianyan
V2EX    iPhone

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

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

    现在的自动化里重复只有每天每周和每月,但是明明其他地方的重复是可以支持每隔 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 * *
    sparkssssssss
        14
    sparkssssssss  
       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     Solana     871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 21:10 PVG 05:10 LAX 14:10 JFK 17:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86