【问题标题】:My cron job only runs once, I would like it to run every minute我的 cron 作业只运行一次,我希望它每分钟运行一次
【发布时间】:2020-12-19 16:00:12
【问题描述】:

我尝试搜索解决方案或任何有关将 cron 与 discord js 结合使用的信息,但搜索结果毫无结果。我还是很菜鸟,希望大家多多包涵:p

const { mudaeon, mudaeoff} = require('./mudaetime.json')
const cron  = require('cron');

module.exports = {
    name: 'mudaetime',
    description: '...',
    async execute(message, args){
        if(mudaeon){
            const channel = message.client.channels.cache.get('*id*')
            let scheduledMessage = new cron.CronJob("*/1 * * * *", () => {
                scheduledMessage.start()},
                message.react('✅'),
                channel.send("check $tu ! <@&*id*>"))
        } else(mudaeoff);{
            let scheduledMessage = new cron.CronJob("*/1 * * * *")
            scheduledMessage.stop();
        }
    }
}; 

【问题讨论】:

  • 你的 cron 时间不对,看这个https://crontab.guru/every-1-minute,你要的是* * * * *,而不是*/1 * * * *
  • 使用* * * * *
  • 我也试过* * * * *,但没用
  • 1.确保您的代码在打印出一些日志消息console.log() 时运行良好。我觉得你告诉scheduledMessageCronJob 中启动CronJob 看起来很奇怪。看起来这永远不会执行,因为 Cronjob 首先没有执行。 2.我对JavaScript的了解太少了,你用的CronJobasync兼容吗?您的message.reactchannel.send 缺少await 语句。 3. 同样,我的 JavaScript 知识很少,但在我看来,您也有范围问题。不过我可能在这里错了。
  • } else(mudaeoff);{ 有一个流氓 ;require 使用缓存,所以 mudaeon 和 mudaeoff 不会在调用之间更新.. 编辑:等一下它应该是 } else if (mudaeoff)

标签: javascript node.js cron discord discord.js


【解决方案1】:

所以我最终接受了 Tin Nyugen 的建议并运行了一个基本示例,结果发现这比我想象的要简单得多:


    const cron = require('node-cron');


module.exports = {
    name: 'mudaestart',
    description: '...',
    execute(message, args){
        message.react('✅')
        cron.schedule('* * * * *', () => {
            message.channel.send('check $tu !! <@&id>')
        })
    }
} 

我切换到 node-cron :p 我不确定这是编写此代码的最佳方式,但我很高兴它可以工作,而且我在尝试编写此命令时学到了很多东西!

【讨论】:

    【解决方案2】:

    您似乎从未真正启动过您的 cronJob。查看 Cron 文档 (https://www.npmjs.com/package/cron#usage-basic-cron-usage),您需要启动 Cron 作业才能执行代码。初始化 cron 作业时的第二个参数是要执行的函数。这个函数只会在你调用job之后执行。

    试试这个:

    const cron = require('cron');
    
    module.exports = {
        name: 'mudaetime',
        description: '...',
        async execute(message, args) {
            if (mudaeon) {
                const channel = message.client.channels.cache.get('*id*');
                let scheduledMessage = new cron.CronJob(
                    '*/1 * * * *',
                    () => {
              message.react('✅'); 
              channel.send('check $tu ! <@&*id*>');
                    },
                    
          );
          scheduledMessage.start();
            } else mudaeoff;
            {
                let scheduledMessage = new cron.CronJob('*/1 * * * *');
                scheduledMessage.stop();
            }
        },
    };
    

    希望这能解决您的问题!

    【讨论】:

    • 谢谢你!我会试一试,看看我能从中学到什么:D
    猜你喜欢
    • 2013-11-27
    • 2014-08-07
    • 2011-06-20
    • 1970-01-01
    • 2020-02-23
    • 2018-02-18
    • 2019-06-09
    • 1970-01-01
    • 2015-03-27
    相关资源
    最近更新 更多