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

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

  •  
  •   rizon ·
    othorizon · 79 天前 · 2283 次点击
    这是一个创建于 79 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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


    @Al0rid4l #19 哇,好多哈哈哈。看来也是挑了很久。我去看看这些,谢谢~
    yh7gdiaYW
        21
    yh7gdiaYW  
       77 天前
    @rizon 算是一种特殊用法吧,pm2 start "bash xxx.sh" --time --no-autorestart --instances 1 --cron "*/30 * * * *",等于是个 pm2 管理的 crontab
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   974 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:56 · PVG 05:56 · LAX 14:56 · JFK 17:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.