【问题标题】:Node.js background worker is not gracefully shutting down on herokuNode.js 后台工作人员没有在 heroku 上正常关闭
【发布时间】:2021-11-16 17:32:18
【问题描述】:

我在 Heroku(简化版)上运行了以下 node.js 工作程序。它在单个测功机上使用Procfile 作为工作进程运行。我期待它以0 的退出代码优雅地关闭。但是,它总是以退出代码1 退出,甚至不执行完全关闭功能。

Heroku 让进程在 30 秒内正常关闭(请参阅 https://devcenter.heroku.com/articles/dynos#shutdown)。 节点版本为16.13.0

在本地,它当然是一种魅力。

非常感谢任何帮助。

let running = true;

(async function () {
  console.log('starting')
  while (running) {
    console.log('ping')
    await new Promise(resolve => setTimeout(resolve, 1000))
  }
})()

process.on('SIGTERM', function () {
  console.log('received SIGTERM')
  console.log('shutting down')
  running = false
  setTimeout(() => {
    console.log('finished shutting down')
    process.exit(0)
  }, 1000)
})

Heroku 日志:

2021-11-11T17:27:18.884817+00:00 heroku[test-worker.1]: Restarting
2021-11-11T17:27:18.935900+00:00 heroku[test-worker.1]: State changed from up to starting
2021-11-11T17:27:18.831078+00:00 app[test-worker.1]: ping
2021-11-11T17:27:19.594077+00:00 heroku[test-worker.1]: Stopping all processes with SIGTERM
2021-11-11T17:27:19.654762+00:00 app[test-worker.1]: received SIGTERM
2021-11-11T17:27:19.654801+00:00 app[test-worker.1]: shutting down
2021-11-11T17:27:19.786370+00:00 heroku[test-worker.1]: Process exited with status 1
2021-11-11T17:27:22.660423+00:00 heroku[test-worker.1]: Starting process with command `yarn test-worker`
2021-11-11T17:27:23.532721+00:00 heroku[test-worker.1]: State changed from starting to up
2021-11-11T17:27:24.083102+00:00 app[test-worker.1]: yarn run v1.22.17
2021-11-11T17:27:24.133902+00:00 app[test-worker.1]: $ node lib/test-worker/src/index.js
2021-11-11T17:27:24.192198+00:00 app[test-worker.1]: starting
2021-11-11T17:27:24.192700+00:00 app[test-worker.1]: ping

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    在 Heroku 支持的帮助下,我们能够找出原因是使用了yarn。显然,yarn 没有等待子进程正常关闭。见https://github.com/yarnpkg/yarn/issues/4667

    解决办法是不要在你的Procfile中使用yarn,直接使用node

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      相关资源
      最近更新 更多