npm 在 ctrl+c 上运行 poststop 脚本

Cas*_*mir 5 mongodb sigterm npm-scripts yarnpkg

我的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"
},
Run Code Online (Sandbox Code Playgroud)

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

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

我可以以某种方式实现poststopctrl+ c

Bre*_*t Y 4

您需要捕获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"
},
Run Code Online (Sandbox Code Playgroud)