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

Heroku Node.js Scheduler无法运行:10分钟定时任务配置排查求助

排查Heroku Scheduler运行worker.js失败的常见问题

我来帮你梳理下可能没配置到位的点,一个个排查就能找到问题:

1. 确保worker.js是合法的Node可执行脚本

你的worker.js开头必须加上shebang行,告诉Heroku用Node.js来执行它:

#!/usr/bin/env node
const reports = require('./app/controllers/reports');
reports.sendEmail();

没这行的话,Heroku可能不知道该用什么程序运行这个文件,直接就卡壳了。另外,本地先跑一遍node worker.js,确认不会出现“找不到模块”这类路径错误——毕竟Heroku的文件结构和本地一致,但路径写错的话还是会报错。

2. 检查Scheduler的命令配置

你在Heroku Scheduler里填的命令是不是node worker.js?别只写worker.js,Heroku需要明确知道用Node来执行脚本。另外,还要确认Scheduler用的Node版本和你的项目匹配——看看package.json里的engines字段,比如:

"engines": {
  "node": "18.x"
}

Heroku会自动匹配这个版本,但如果Scheduler用了不同版本,可能会出现依赖兼容问题。

3. 同步邮件服务的环境变量

sendEmail函数肯定依赖SMTP配置这类敏感信息吧?本地你可能存在.env文件里,但Heroku上得用命令把这些变量同步过去:

heroku config:set SMTP_HOST=你的邮件服务器地址 SMTP_PORT=端口 SMTP_USER=邮箱账号 SMTP_PASS=授权码

要是没设置这些环境变量,sendEmail函数根本连不上邮件服务器,自然执行失败。

4. 查看Heroku日志找具体错误

这是最关键的一步!别瞎猜,直接看日志就能知道问题在哪:

heroku logs --ps scheduler

日志里会明确告诉你是模块缺失、环境变量没找到、还是邮件发送时的网络错误——根据日志提示修复就行。

5. 确认项目依赖都在package.json里

本地的node_modules不会被推到Heroku,所以所有依赖(比如nodemailer这类邮件库)都得写在package.json的dependencies里,Heroku部署时才会自动安装。要是漏了依赖,worker.js运行时就会报“找不到模块”的错误。

6. 先在本地验证脚本功能

先在本地运行node worker.js,看能不能成功发邮件。如果本地都失败,那问题出在代码本身,比如sendEmail函数逻辑有问题;如果本地能成功,那肯定是Heroku的配置环节漏了什么。

内容的提问来源于stack exchange,提问作者Rana Umair

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:39:13