V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX  ›  程序员

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

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

    核心需求: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
    xmumiffy
        6
    xmumiffy  
       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
    sjhhjx0122
        15
    sjhhjx0122  
       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   ·   实用小工具   ·   995 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:15 · PVG 06:15 · LAX 15:15 · JFK 18:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.