You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-Cron在Digital Ocean Ubuntu服务器上执行延迟30分钟问题

解决node-cron在Ubuntu服务器上延迟30分钟执行的问题

这明显是时区不匹配导致的问题,从你提供的日志来看,任务执行时间是+05:30时区的17:30、18:30,对应UTC时间的12:00、13:00——说明你的cron任务是按UTC时区的整点触发的,但服务器本地时区是UTC+5:30,所以才会出现30分钟的延迟。下面是具体的排查和解决步骤:

1. 确认服务器当前时区

首先运行命令查看服务器的本地时区:

timedatectl

你会看到类似这样的输出:

Local time: Sat 2018-02-10 17:30:00 IST
Universal time: Sat 2018-02-10 12:00:00 UTC
RTC time: Sat 2018-02-10 12:00:00
Time zone: Asia/Kolkata (IST, +05:30)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

重点看Time zone字段,确认服务器时区是Asia/Kolkata (+05:30)。

2. 为node-cron指定正确的时区

node-cron默认可能使用UTC时区(取决于版本),所以你需要在任务配置中明确指定服务器的本地时区,确保任务在本地时间的整点触发。

修改你的Node.js代码:

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

// 获取服务器的本地时区标识符
const serverTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
console.log(`Using server timezone: ${serverTimezone}`);

// 配置定时任务,指定时区
cron.schedule('0 * * * *', () => {
  console.log(`cron job started at ${new Date().toISOString()}`);
}, {
  timezone: serverTimezone // 关键:指定服务器本地时区
});

如果你已经知道服务器时区的标识符(比如Asia/Kolkata),也可以直接写死:

{
  timezone: 'Asia/Kolkata'
}

3. 升级node-cron到最新版本

旧版本的node-cron可能存在时区处理的bug,建议升级到最新版本:

npm update node-cron

4. 验证结果

重启你的Node.js服务后,观察日志,正常情况下任务应该在本地时间的整点执行,比如:

cron job started at 2018-02-10T17:00:00+05:30
cron job started at 2018-02-10T18:00:00+05:30

备选方案:修改服务器时区为UTC(如果业务需要)

如果你的任务逻辑原本期望按UTC时间的整点执行,只是想让服务器显示时间和UTC一致,可以修改服务器时区:

sudo timedatectl set-timezone UTC

修改后重启Node.js服务,任务就会在UTC整点(即服务器本地时间整点)执行。

内容的提问来源于stack exchange,提问作者Gaurav Umrani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:31:36