确保仅配置一次节点 Cron 作业
Ensure That Node Cron Job is Only Configured Once
我正在编写一个 Discord 机器人并让它在使用 node-cron 启动时安排一个 cron 作业。我将其定义如下(到目前为止非常基本):
cron.schedule('15 1,3,5,7,9,11,13,15,17,19,21,23 * * *', () => {
GameUpdater.sendGameUpdatesToLeagueChannels(this.guilds);
});
问题是,Discord 机器人通常会重新连接,这将重新运行 代码中必须存在的部分。我正在考虑检查一个外部值,也许在我的数据库中,它管理它最近是 运行 还是已经 运行ning 或类似的东西,但我想知道是否有使用 node-cron 使 cron 作业独一无二的正确方法?
首先,您需要在某处保存计划任务的名称,该名称默认为 UUID V4,但可以使用上面调用的 schedule 方法的第三个参数作为选项提供。
通过从数据库或您编写的脚本中 hard-coded 常量引用此名称,您可以使用 cron.getTasks
列出所有计划任务以确保当前任务在安排之前不存在。
如果您引用的是 hard-coded 名称,那么调用 schedule
方法将替换现有计划任务,而不是创建新任务。
更新
要设置计划任务的名称,只需将选项对象作为第三个参数传递给您正在调用的 schedule
方法,并为您的任务命名。
示例:
cron.schedule('15 1,3,5,7,9,11,13,15,17,19,21,23 * * *', () => {
GameUpdater.sendGameUpdatesToLeagueChannels(this.guilds);
}, { name: "example-task-1234" });
如果 cron 计划在启动时从 Client.on('ready')
启动,让您的 cronjob 在单独的事件 Client.once('ready')
中安排,这样当机器人重新连接时它不会再次触发例程。仅当整个 shard/cluster 进程终止并重新启动时。
您可以使用记录器来跟踪服务器的重启或启动时间。
您可以使用 winston 点击 HERE
这将有助于生成您的服务器日志,以便您可以在启动服务器之前阅读它,以便您可以采取行动。比如说调整时间等等
我正在编写一个 Discord 机器人并让它在使用 node-cron 启动时安排一个 cron 作业。我将其定义如下(到目前为止非常基本):
cron.schedule('15 1,3,5,7,9,11,13,15,17,19,21,23 * * *', () => {
GameUpdater.sendGameUpdatesToLeagueChannels(this.guilds);
});
问题是,Discord 机器人通常会重新连接,这将重新运行 代码中必须存在的部分。我正在考虑检查一个外部值,也许在我的数据库中,它管理它最近是 运行 还是已经 运行ning 或类似的东西,但我想知道是否有使用 node-cron 使 cron 作业独一无二的正确方法?
首先,您需要在某处保存计划任务的名称,该名称默认为 UUID V4,但可以使用上面调用的 schedule 方法的第三个参数作为选项提供。
通过从数据库或您编写的脚本中 hard-coded 常量引用此名称,您可以使用 cron.getTasks
列出所有计划任务以确保当前任务在安排之前不存在。
如果您引用的是 hard-coded 名称,那么调用 schedule
方法将替换现有计划任务,而不是创建新任务。
更新
要设置计划任务的名称,只需将选项对象作为第三个参数传递给您正在调用的 schedule
方法,并为您的任务命名。
示例:
cron.schedule('15 1,3,5,7,9,11,13,15,17,19,21,23 * * *', () => {
GameUpdater.sendGameUpdatesToLeagueChannels(this.guilds);
}, { name: "example-task-1234" });
如果 cron 计划在启动时从 Client.on('ready')
启动,让您的 cronjob 在单独的事件 Client.once('ready')
中安排,这样当机器人重新连接时它不会再次触发例程。仅当整个 shard/cluster 进程终止并重新启动时。
您可以使用记录器来跟踪服务器的重启或启动时间。 您可以使用 winston 点击 HERE
这将有助于生成您的服务器日志,以便您可以在启动服务器之前阅读它,以便您可以采取行动。比如说调整时间等等