节点 Cron 不在 heroku 服务器上执行
Node Cron not execute on heroku server
我有一个应用程序后端,在 heroku 服务器上部署了 express 节点。我的后端应用程序使用 node-cron 进行调度。我设置了一个时间表,每 7 a.m.,但在 7 a.m 发送一次 FCM 通知。没有收到通知,我检查了 heroku 服务器上的日志,那里什么也没发生(之前我在应用程序上写了 console.log
)
这听起来像是您为 cron 调度程序设置的时区的问题。
尝试转换 7a.m。到 UTC 时区并再次 运行 调度程序。
我假设您使用的是免费版的 Heroku。
如果 Heroku 应用程序持续 30 分钟没有收到任何流量,它将进入不活动状态。这样做是为了保留您的免费测功机小时数。
解决此问题的一种方法是在 Linux 机器(最好是像 Raspberry Pi 这样的微型计算机,因为它功率低)中创建一个 cronjob,它将执行 GET
分钟的请求在 node-cron
运行之前。这将防止实例进入休眠状态。建议为连接测试创建一个专用端点。
示例:
- 我们先编辑crontab。
crontab -e
- 假设您想每隔 06:55.
发出一个 GET
请求
55 6 * * * curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET <YOUR_WEBSERVER_CONNECTION_TEST_ENDPOINT_LINK>
参考文献:
我有一个应用程序后端,在 heroku 服务器上部署了 express 节点。我的后端应用程序使用 node-cron 进行调度。我设置了一个时间表,每 7 a.m.,但在 7 a.m 发送一次 FCM 通知。没有收到通知,我检查了 heroku 服务器上的日志,那里什么也没发生(之前我在应用程序上写了 console.log
)
这听起来像是您为 cron 调度程序设置的时区的问题。
尝试转换 7a.m。到 UTC 时区并再次 运行 调度程序。
我假设您使用的是免费版的 Heroku。
如果 Heroku 应用程序持续 30 分钟没有收到任何流量,它将进入不活动状态。这样做是为了保留您的免费测功机小时数。
解决此问题的一种方法是在 Linux 机器(最好是像 Raspberry Pi 这样的微型计算机,因为它功率低)中创建一个 cronjob,它将执行 GET
分钟的请求在 node-cron
运行之前。这将防止实例进入休眠状态。建议为连接测试创建一个专用端点。
示例:
- 我们先编辑crontab。
crontab -e
- 假设您想每隔 06:55. 发出一个
GET
请求
55 6 * * * curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET <YOUR_WEBSERVER_CONNECTION_TEST_ENDPOINT_LINK>
参考文献: