求助, nodejs 有什么简单的按间隔调度的库 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX    程序员

求助, nodejs 有什么简单的按间隔调度的库

  •  
  •   rizon
    othorizon 2024-03-05 12:26:46 +08:00 3489 次点击
    这是一个创建于 585 天前的主题,其中的信息可能已经有所发展或是发生改变。

    核心需求:nodejs 库,当上一个任务完成后间隔一定时间调度下一个任务。

    求助大佬们,有这样的开源库吗。

    另外问个问题,在一个自托管运行的 nextjs 项目里,启动调度任务的代码,写在哪个位置,可以让代码启动的时候自动启动呢?

    21 条回复    2024-03-07 10:21:45 +08:00
    243634473
        1
    243634473  
       2024-03-05 12:35:47 +08:00
    青龙面板
    sankooc
        2
    sankooc  
       2024-03-05 13:03:41 +08:00
    远古时期 有个 async 库有这个功能
    Belmode
        3
    Belmode  
       2024-03-05 13:05:56 +08:00
    node-cron
    guiling
        4
    guiling  
       2024-03-05 14:14:50 +08:00
    一般的库都是定时"开始"执行任务的
    如果想根据上一个任务结束时间来延时,可以在任务结束时动态创建下一个任务,大部分库都支持
    要求不高的话 settimeout 都行
    Jven
        5
    Jven  
       2024-03-05 14:27:16 +08:00
    106npo
        6
    106npo  
       2024-03-05 14:29:57 +08:00 via Android
    直接每个任务加个 sleep
    rocmax
        7
    rocmax  
       2024-03-05 14:34:08 +08:00 via Android
    nextjs custom server 启动的时候

    https://nextjs.org/docs/pages/building-your-application/configuring/custom-server

    不过我建议在 nextjs 只开发处理的 api ,使用外部定时调用服务比如 k8s 的 cronjob 来发请求给 api ,这样扩展性好点。
    leopod1995
        8
    leopod1995  
       2024-03-05 14:38:48 +08:00
    有固定执行时间/周期,大部分用 cron 类就可以满足。

    对待执行时间长,严格要求上一个结束后隔固定时间才能执行的,这种场景其实如楼上所说,setTimeout 不失为一种好的方案。
    dudubaba
        9
    dudubaba  
       2024-03-05 15:08:35 +08:00
    走定时任务机制啊,任务成功后写入下一个任务 id 到 redis ,然后定时拉取 redis 不是更好
    BraydenCai229
        10
    BraydenCai229  
       2024-03-05 15:09:05 +08:00
    node-cron
    wangtian2020
        11
    wangtian2020  
       2024-03-05 15:25:31 +08:00   1
    setTimeout() 不行吗
    上一个任务完成时创建一个 setTimeout()
    xudong
        12
    xudong  
       2024-03-05 15:32:49 +08:00
    nextjs 我估计你的运行时可能是无服务器的,那么你最好把逻辑写成一个 http 接口,外部定时请求这个接口。可以用其他函数计算服务做定时触发调用。
    nitmali
        13
    nitmali  
       2024-03-05 15:42:12 +08:00
    rxjs
    churchill
        14
    churchill  
       2024-03-05 21:36:33 +08:00
    找个队列实现,自己写点任务逻辑不比各种定时器稳妥吗
    比如 bullmq
    linkopeneyes
        15
    linkopeneyes  
       2024-03-06 08:24:33 +08:00
    简单的就 setTimeout,复杂的用 rxjs
    rizon
        16
    rizon  
    OP
       2024-03-06 11:11:10 +08:00 via iPhone
    @nitmali
    @sjhhjx0122 rxjs 不是一个响应式框架吗,
    yh7gdiaYW
        17
    yh7gdiaYW  
       2024-03-06 15:02:15 +08:00
    定时任务的话可以用 pm2 ,非常好用以至于我把现在 python 组里的后端部署模板也改成用这个了。
    要上一个任务完成后再间隔一段时间执行,可以把触发频率设置的高一点,在任务开头检测下距上次完成过了多久
    yh7gdiaYW
        18
    yh7gdiaYW  
       2024-03-06 15:03:05 +08:00
    或者干脆 while true+setTimeout
    rizon
        20
    rizon  
    OP
       2024-03-06 22:20:17 +08:00
    @yh7gdiaYW #17 pm2 不是 nodejs 管理的吗,居然还可以做这个,我去看看。谢谢~


    @Al0rid4l #19 哇,好多哈哈哈。看来也是挑了很久。我去看看这些,谢谢~
    yh7gdiaYW
        21
    yh7gdiaYW  
       2024-03-07 10:21:45 +08:00
    @rizon 算是一种特殊用法吧,pm2 start "bash xxx.sh" --time --no-autorestart --instances 1 --cron "*/30 * * * *",等于是个 pm2 管理的 crontab
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1156 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:43 PVG 01:43 LAX 10:43 JFK 13:43
    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