无法使Node.js服务器永远/ pm2 / nohup保持运行

时间:2018-08-14 14:39:48

标签: node.js pm2 forever nohup

我有一个node.js应用程序,该应用程序已部署并在具有托管提供程序的虚拟专用服务器上运行。

我已经安装了永久模块。当我通过ssh登录时,遍历到节点应用程序文件夹并运行

forever start app.js

应用程序启动并打印

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

但是,一旦我退出ssh或关闭终端并刷新我的Web应用程序页面,它就会给我503服务不可用错误。

首先,我认为可能是因为有关minUptime和spinSleepTime的两个警告导致服务器停止,所以我这样做了

forever start --minUptime 1000 --spinSleepTime 1000 app.js

服务器正在运行,但是从ssh / terminal退出时再次出现503错误。

我什至尝试运行

nohup node app.js &

但是,服务器再次运行,退出ssh会显示503。

我安装了pm2并运行

pm2 start app.js

但是完全一样。

我的package.json看起来像这样:

{
  "name": "test-app",
  "version": "1.0.0",
  "description": "My Application",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "git+https://username@bitbucket.org/reponame/mytest-app.git"
  },
  "author": "First Last",
  "license": "ISC",
  "homepage": "https://bitbucket.org/reponame/mytest-app#readme",
  "dependencies": {
    "async": "^2.6.1",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "^1.18.3",
    "connect-multiparty": "^2.1.1",
    "cookie-parser": "^1.4.3",
    "express": "^4.16.3",
    "express-handlebars": "^3.0.0",
    "express-session": "^1.15.6",
    "multer": "^1.3.0",
    "mysql": "^2.15.0",
    "passport": "^0.4.0",
    "passport-local": "^1.0.0",
    "path": "^0.12.7",
    "shortid": "^2.2.8",
    "uuid": "^3.2.1",
    "winston": "^2.4.2"
  }
}

任何人都知道发生了什么事吗?为什么退出终端时应用程序会停止?我是否需要像启动脚本一样向package.json添加其他内容?

1 个答案:

答案 0 :(得分:0)

假定此程序在Linux上运行-创建如下所示的Shell脚本-如果该应用程序正在运行,它将重新启动该应用程序。 您可以更新脚本以仅启动应用程序。完成任何更改后,我使用此脚本重新启动我的应用程序。替换运行您的应用程序的端口号。 下面的脚本用于端口3005,并通过app.js启动节点应用 更新您想要查看错误和输出日志的合适位置。

您还可以尝试派生一个将运行应用程序而不是此脚本的进程,以便注销后该进程继续运行-不需要永久模块。

#!/bin/bash
PID1=`netstat -antp 2>/dev/null|grep ':::3005'|awk '{print $7}'`
PID=`echo $PID1| cut -f1 -d "/"`
echo "$PID"
if [[ "$PID" ]];
  then
  echo "Stopping App running on process ID $PID"
  forever stop "$PID"
  echo "App stopped"
else
  echo "App not running"
fi
echo 'starting'
forever -m5 -o "../../output.log" -e 
"../../error.log" start app.js
echo 'started'
exit