Windows:自动启动 PM2 和节点应用程序

新手上路,请多包涵

在 Windows AWS 服务器上,我有一个节点应用程序,我正在使用 PM2 启动该应用程序

我已经尝试过 NPM:“pm2-windows-startup”和“pm2-windows-service”

但是在我重新启动我的 AWS 实例并运行之后

PM2 ls

列表中没有显示节点应用程序…

我按照指示…

  1. 安装了 NPM(所以重启后 PM2 会自动启动)
  2. PM2 启动 myApp.js –name mySuperApp
  3. PM2 保存
  4. 重启
  5. PM2 ls –> 没有运行节点应用程序? :-(

PM2 日志不包含任何内容…

我没有显式添加任何 ENV 变量(当我尝试 PM2 时无法再启动 - 所以我创建了一个新的 AWS Windows 实例并再次从头开始安装所有东西……)

PM2 位于默认位置(我没有更改任何路径)

 C:\Users\Administrator\.pm2

我的 PM2 文件包含:

2017-03-13 07:37:48: ======================================== ========================================= 2017-03-13 07:37:48 : — 新的 PM2 守护进程启动 —————————————— ———-

2017-03-13 07:37:48:时间:2017 年 3 月 13 日星期一 07:37:48 GMT+0000(协调世界时) 2017-03-13 07:37:48:PM2 版本:2.4.2 2017-03 -13 07:37:48:Node.js 版本:6.10.0 2017-03-13 07:37:48:当前架构:x64 2017-03-13 07:37:48:PM2 主页:C:\Users\ Administrator.pm2 2017-03-13 07:37:48:PM2 PID 文件:C:\Users\Administrator.pm2\pm2.pid 2017-03-13 07:37:48:RPC 套接字文件:\.\pipe\ rpc.sock 2017-03-13 07:37:48:BUS 套接字文件:\.\pipe\pub.sock 2017-03-13 07:37:48:应用程序日志路径:C:\Users\Administrator.pm2\日志 2017-03-13 07:37:48:进程转储文件:C:\Users\Administrator.pm2\dump.pm2 2017-03-13 07:37:48:并发操作:2 2017-03-13 07: 37:48:SIGTERM 超时:1600 2017-03-13 07:37:48:=============================== =================================================

2017-03-13 07:37:48:在 -fork 模式下开始执行序列 - 应用程序名称:mySuperApp id:0 2017-03-13 07:37:48:应用程序名称:mySuperApp id:0 在线 2017-03- 13 07:40:45: =========================================== =====================================

2017-03-13 07:40:45: — 新的 PM2 守护进程启动 ——————————– ——————– 2017-03-13 07:40:45:时间:2017 年 3 月 13 日星期一 07:40:45 GMT+0000(协调世界时) 2017-03-13 07:40:45:PM2 版本:2.4.2 2017-03-13 07:40:45:Node.js 版本:6.10.0 2017-03-13 07:40:45:当前架构: x64 2017-03-13 07:40:45:PM2 主页:C:\Users\Administrator.pm2 2017-03-13 07:40:45:PM2 PID 文件:C:\Users\Administrator.pm2\pm2.pid 2017-03-13 07:40:45:RPC 套接字文件:\.\pipe\rpc.sock 2017-03-13 07:40:45:BUS 套接字文件:\.\pipe\pub.sock 2017-03- 13 07:40:45:应用程序日志路径:C:\Users\Administrator.pm2\logs 2017-03-13 07:40:45:进程转储文件:C:\Users\Administrator.pm2\dump.pm2 2017- 03-13 07:40:45:并发操作:2 2017-03-13 07:40:45:SIGTERM 超时:1600 2017-03-13 07:40:45:=========== ==================================================== ===================

我的 PM2 DUMB 文件包含:

[ {“exec_mode”:“fork_mode”,“watch”:false,“treekill”:true,“autorestart”:true,“automation”:true,“pmx”:true,“vizion”:true,“name”: “mySuperApp”、“node_args”:[]、“pm_exec_path”:“c:\mypath\mySuperApp\server.js”、“env”:{“windir”:“C:\Windows”、“USERPROFILE”:“C :\Users\Administrator”, “USERNAME”: “Administrator”, “USERDOMAIN_ROAMINGPROFILE”: “EC2AMAZ-REBQJDK”, “USERDOMAIN”: “EC2AMAZ-REBQJDK”, “TMP”: “C:\Users\ADMINI~1\AppData \Local\Temp\2”, “TEMP”: “C:\Users\ADMINI~1\AppData\Local\Temp\2”, “SystemRoot”: “C:\Windows”, “SystemDrive”: “C:” , “SESSIONNAME”: “RDP-Tcp#1”, “PUBLIC”: “C:\Users\Public”, “PSModulePath”: “C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\ v1.0\Modules;C:\Program Files (x86)\AWS Tools\PowerShell\”, “PROMPT”: “\(P\)G”, “ProgramW6432”: “C:\Program Files”, “ProgramFiles(x86) “: “C:\Program Files (x86)”, “ProgramFiles”: “C:\Program Files”, “ProgramData”: “C:\ProgramData”, “PROCESSOR_REVISION”: “3f02”, “PROCESSOR_LEVEL”: “6 “, “处理SSOR_IDENTIFIER”: “Intel64 Family 6 Model 63 Stepping 2, GenuineIntel”, “PROCESSOR_ARCHITECTURE”: “AMD64”, “PM2_USAGE”: “CLI”, “PM2_INTERACTOR_PROCESSING”: “true”, “PATHEXT”: “.COM;.EXE; .BAT;.CMD;.VBS;.VBE;.JSE;.WSF;.WSH;.MSC”, “路径”: “C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem ;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Amazon\cfn-bootstrap\;C:\Program Files\nodejs\;C:\Users\Administrator\AppData\Local\Microsoft\ WindowsApps;C:\Users\Administrator\AppData\Roaming\npm”,”OS”:”Windows_NT”,”NUMBER_OF_PROCESSORS”:”1”,”LOGONSERVER”:”\\EC2AMAZ-REBQJDK”,”LOCALAPPDATA”:”C :\Users\Administrator\AppData\Local”, “HOMEPATH”: “\Users\Administrator”, “HOMEDRIVE”: “C:”, “ComSpec”: “C:\Windows\system32\cmd.exe”, “COMPUTERNAME “: “EC2AMAZ-REBQJDK”, “CommonProgramW6432”: “C:\Program Files\Common Files”, “CommonProgramFiles(x86)”: “C:\Program Files (x86)\Common Files”, “CommonProgramFiles”: “C :\Program Files\Common Files”, “CLIENTNAME”: “THESILVERFOX”, “APPDATA”: “C:\U sers\Administrator\AppData\Roaming”, “ALLUSERSPROFILE”: “C:\ProgramData”, “PM2_HOME”: “C:\Users\Administrator\.pm2”, “mySuperApp”: {} }, “pm_cwd”: “c :\mypath\mySuperApp”, “exec_interpreter”: “node”, “pm_out_log_path”: “C:\Users\Administrator\.pm2\logs\mySuperApp-out-0.log”, “pm_err_log_path”: “C:\Users \Administrator\.pm2\logs\mySuperApp-error-0.log”, “pm_pid_path”: “C:\Users\Administrator\.pm2\pids\mySuperApp-0.pid”, “km_link”: false, “NODE_APP_INSTANCE” :0,“vizion_running”:假,“windir”:“C:\Windows”,“USERPROFILE”:“C:\Users\Administrator”,“USERNAME”:“管理员”,“USERDOMAIN_ROAMINGPROFILE”:“EC2AMAZ-REBQJDK” , “USERDOMAIN”: “EC2AMAZ-REBQJDK”, “TMP”: “C:\Users\ADMINI~1\AppData\Local\Temp\2”, “TEMP”: “C:\Users\ADMINI~1\AppData\ Local\Temp\2”、“SystemRoot”:“C:\Windows”、“SystemDrive”:“C:”、“SESSIONNAME”:“RDP-Tcp#1”、“PUBLIC”:“C:\Users\Public “, “PSModulePath”: “C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86 )\AWS Tools\PowerShell\”, “PROMPT”: “\(P\)G”, “ProgramW6432”: “C:\Program Files”, “ProgramFiles(x86)”: “C:\Program Files (x86)”, “ProgramFiles”:“C:\Program Files”,“ProgramData”:“C:\ProgramData”,“PROCESSOR_REVISION”:“3f02”,“PROCESSOR_LEVEL”:“6”,“PROCESSOR_IDENTIFIER”:“Intel64 Family 6 Model 63 Stepping 2、正版Intel”、“PROCESSOR_ARCHITECTURE”:“AMD64”、“PM2_USAGE”:“CLI”、“PM2_INTERACTOR_PROCESSING”:“true”、“PATHEXT”:“.COM;.EXE;.BAT;.CMD;.VBS;。 VBE;.JSE;.WSF;.WSH;.MSC”, “路径”: “C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\ v1.0\;C:\Program Files\Amazon\cfn-bootstrap\;C:\Program Files\nodejs\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;C:\Users\Administrator\AppData \Roaming\npm”、“OS”:“Windows_NT”、“NUMBER_OF_PROCESSORS”:“1”、“LOGONSERVER”:“\\EC2AMAZ-REBQJDK”、“LOCALAPPDATA”:“C:\Users\Administrator\AppData\Local” , “HOMEPATH”: “\Users\Administrator”, “HOMEDRIVE”: “C:”, “ComSpec”: “C:\Windows\system32\cmd.exe”, “ COMPUTERNAME”: “EC2AMAZ-REBQJDK”, “CommonProgramW6432”: “C:\Program Files\Common Files”, “CommonProgramFiles(x86)”: “C:\Program Files (x86)\Common Files”, “CommonProgramFiles”: “ C:\Program Files\Common Files”、“CLIENTNAME”:“THESILVERFOX”、“APPDATA”:“C:\Users\Administrator\AppData\Roaming”、“ALLUSERSPROFILE”:“C:\ProgramData”、“PM2_HOME”: “C:\Users\Administrator\.pm2”,“状态”:“在线”,“pm_uptime”:1489390668484,“axm_actions”:[],“axm_monitor”:{“循环延迟”:{“警报”:{} ,“agg_type”:“avg”,“value”:“36.91ms”}},“axm_options”:{“default_actions”:true,“transactions”:false,“http”:false,“http_latency”:200,“ http_code”:500,“ignore_routes”:[],“profiling”:true,“errors”:true,“alert_enabled”:true,“custom_probes”:true,“network”:false,“ports”:false,“ignoreFilter “: { “method”: [ “OPTIONS” ], “url”: [] }, “excludedHooks”: [], “module_conf”: {}, “module_name”: “mySuperApp”, “module_version”: “2.4. 2”, “pmx_version”: “1.0.3”, “error”: true }, “axm_dynamic”: {}, “cre ated_at”:1489390668484,“restart_time”:0,“unstable_restarts”:0,“versioning”:null,“node_version”:“6.10.0”}]

原文由 PabloDK 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
1 个回答

2020 年 2 月 16 日更新:

如果您认为 PM2 无需您登录机器(重启后)即可自动启动对您很重要,请按照我的新说明而不是旧说明进行操作。

新说明(推荐):

先决条件(第 1 部分):

首先,我在所有用户都可以使用的位置安装了 NPM 。根据您的用例,可能没有必要。但是,如果您想更改默认位置 NPM - 您应该先进行(在继续之前)。以下是将其更改为位置的方法(在终端中以管理员身份): C:\NodeJS\npm

 npm config set prefix "C:\\NodeJS\\npm"
npm config set cache "C:\\NodeJS\\npm-cache"
npm config set temp "C:\\NodeJS\\temp"
npm config ls -l (this will list all NPM settings -> look for the 3 lines/changes marked as `overriden`)

先决条件(第 2 部分):

  1. System environments (不是用户环境)中添加并设置 PM2_HOME 。喜欢: PM2_HOME = C:\NodeJS\npm
  2. C:\NodeJS\npm 添加到现有的系统 PATH 变量中(然后你确定它会工作 - 有一些问题报告说 PM2_HOME 并不总是工作)。
  3. 关闭所有终端并再次打开它们(以管理员身份)。您的终端窗口现在将知道您的环境更改。

先决条件(第 3 部分):

  1. npm 安装 pm2 -g
  2. npm i pm2-windows-service -g
  3. npm install -g npm-check-updates

目前在 pm2-windows-service 包使用的模块中有一个错误 - 所以我们也修复这个问题,请按照以下步骤操作:

  1. 在终端 cd 变成: C:\NodeJS\npm\node_modules\pm2-windows-service
  2. ncu inquirer this only outputs the existing and the newest available version of the inquirer module we need to update, currently: version: 1.1.2 –> 7.0.4 .
  3. ncu inquirer -u 这将更新您的 packages.json 文件。
  4. npm install 这将下载并更新 inquirer 模块(请注意,如果您不在 packages.json 文件中使用特定版本语法或您已手动更改–> 其他模块也会更新。

安装并设置 PM2(作为服务)以在重启后自动启动:

  1. 在终端 cd 变成: C:\NodeJS\npm\node_modules\pm2-windows-service

  2. pm2-service-install -n PM2_STARTUP_SCRIPTPM2_STARTUP_SCRIPT 将是 Windows 服务的“显示名称”。将其更改为您喜欢的名称并点击 ENTER 。)

  3. 执行环境设置(推荐)? Yes

  4. 设置 PM2_HOME? No (不需要 - 你已经设置好了)

  5. 设置 PM2_SERVICE_SCRIPTS(pm2 的启动脚本列表)? Yes

  6. 设置启动脚本/文件列表(分号分隔的 json 配置文件或 js 文件) ENTER (没有输入时 - 默认使用 PM2 的 dump.pm2 文件 - 即运行时创建的 PM2 -f save ,我稍后会返回并解释)。

  7. 设置 PM2_SERVICE_PM2_DIR(与服务一起使用的全局 pm2 的位置)? Yes

  8. 指定包含服务要使用的 pm2 版本的目录? ENTER

PM2 服务已安装并启动。

  1. 在 Windows 中打开服务并将服务更改为以管理员(或您的首选角色)身份运行。

设置您喜欢 PM2 的应用程序以启动 - 关闭或重新启动后:

  1. pm2 start myApp.js --name mySuperApp
  2. pm2 -f save
  3. 重新启动,或者如果您使用 AWS(或任何其他云提供商)。重新启动您的实例 - 等待 5 分钟,然后登录机器并执行 pm2 ls 并检查您的应用程序是否已启动并运行了约 5 分钟(不仅是因为您刚刚登录,所以只有几秒钟)。

从您的注册表中卸载并清理“pm2-windows-startup”(如果您从我的“旧指令”切换到新指令):

  1. npm 卸载 pm2-windows-startup -g
  2. 从注册表中删除 PM2 键,如下图所示:

在此处输入图像描述

旧指令(不推荐):

我在下面的旧答案仍然有效 - 但除非您登录机器,否则 PM2 不会启动,因为它正在从注册表加载 PM2 并且不会将其作为服务运行。

我不知道为什么 - 但经过几次尝试,这解决了(在新安装的 AWS Windows 2016 BASE 实例上)

  1. npm 安装 pm2 -g
  2. npm install pm2-windows-startup -g
  3. pm2-启动安装
  4. pm2 启动 myApp.js –name mySuperApp
  5. pm2 保存
  6. 重启
  7. 下午2点

原文由 PabloDK 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题