• 请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX  ›  程序员

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

  •  
  •   rizon ·
    othorizon · Mar 5, 2024 · 4126 views
    This topic created in 825 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

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

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


    @Al0rid4l #19 哇,好多哈哈哈。看来也是挑了很久。我去看看这些,谢谢~
    yh7gdiaYW
        21
    yh7gdiaYW  
       Mar 7, 2024
    @rizon 算是一种特殊用法吧,pm2 start "bash xxx.sh" --time --no-autorestart --instances 1 --cron "*/30 * * * *",等于是个 pm2 管理的 crontab
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3173 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 00:26 · PVG 08:26 · LAX 17:26 · JFK 20:26
    ♥ Do have faith in what you're doing.