【问题标题】:npm run poststop script on ctrl+cnpm 在 ctrl+c 上运行 poststop 脚本
【发布时间】:2018-11-01 09:55:00
【问题描述】:

我的package.json 脚本部分如下所示。

"scripts": {
  "prestart": "mongod",
  "start": "NODE_ENV=prod node server.js",
  "poststop": "mongo admin --eval 'db.shutdownServer()'",
  "predev": "mongod",
  "dev": "NODE_ENV=dev nodemon server.js"
},

在启动服务器之前,我使用 pre- 和 post 挂钩来启动 mongod。然后我使用 ctrl+c 杀死我的服务器。不幸的是,这不会执行poststop 脚本。因此,第二次调用npm/yarn start/dev 会引发错误并中止,因为mongod 已经在运行。

另一个 mongod 实例已经在 /data/db 目录上运行, 终止

我可以在 ctrl+c 上以某种方式调用 poststop 吗?

【问题讨论】:

  • poststop 特定于 mongod,对吗?
  • @JoshuaPinter 已经有一段时间了,但 IIRC 是我编造的。随便叫什么。

标签: mongodb yarnpkg npm-scripts sigterm


【解决方案1】:

您需要捕获 SIGINT 信号并返回成功退出代码 (0)

"scripts": {
  "prestart": "mongod",
  "start": "trap 'exit 0' SIGINT; NODE_ENV=prod node server.js",
  "poststop": "mongo admin --eval 'db.shutdownServer()'",
  "predev": "mongod",
  "dev": "NODE_ENV=dev nodemon server.js"
},

【讨论】:

  • 这里的"poststart"不应该是"poststop"吗?
  • 嗯,这似乎对我不起作用,它只会退出而不运行 post 调用。有什么建议吗?
猜你喜欢
  • 2021-11-23
  • 2019-07-10
  • 2017-12-11
  • 2016-05-26
  • 2023-01-17
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 2017-01-03
相关资源
最近更新 更多