带pm2的Nestjs,用pm2 stop杀死进程后端口仍然可以使用吗?

Nestjs with pm2, port still be used after killing the process with pm2 stop?

我使用 pm2 作为进程管理器在我的 VPS (Ubuntu 20.04 DO) 上部署了我的 Nest.js 应用程序。这是我更新应用程序时的步骤。

$ pm2 stop 1
$ kill -9 $(sudo lsof -t -i:4040)
$ npm run build
$ pm2 start 1

请注意,在我继续构建之前,我必须终止应用程序使用的端口,如何简化它并变得像这样:

$ npm run build
$ pm2 reload 1

所以我可以优雅地部署我的 Nest.js 应用程序并实现至少只有 1% 的停机时间

停止命令将应用保留在应用列表中,而删除命令则不会。

我想你想要这样的东西

start.sh

#!/bin/bash
source .env
ENVIRONMENT="$NODE_ENV"
npm run build || exit
pm2 delete "$ENVIRONMENT"
pm2 start "npm run start:prod" --name "$ENVIRONMENT" --log-date-format 'DD-MM HH:mm:ss.SSS'

如果您不使用不同的环境,则等效脚本为

#!/bin/bash
npm run build || exit
pm2 delete my_application
pm2 start "npm run start:prod" --name my_application --log-date-format 'DD-MM HH:mm:ss.SSS'

发出 --log-date-format 完全没问题。但是,我将其包括在内,因为我怀疑它可能会在发现生产线上的错误时有所帮助。