繁体   English   中英

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

[英]Windows: Auto start PM2 and node apps

在 Windows AWS 服务器上,我有一个 NODE 应用程序,我正在使用 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\logs 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", "PRO CESSOR_LEVEL": "6", "PROCESSOR_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\85038\855User3;8681 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", "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": false, "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", "PROCESSOR_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;881 03756586388:\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", "CLIENTNAME": "THESILVERFOX", "APPDATA": "C:\Users\Administrator\AppData\Roaming", "ALLUSERSPROFILE": "C:\ProgramData", "PM2_HOME": "C: \Users\Administrator\.pm2", "status": "online", "pm_uptime": 1489390668484, "axm_actions": [], "axm_monitor": { "Loop delay": { "alert": {}, "agg_type “:“平均”,“价值”:“36.91ms”}},“axm_options”:{“default_actions”:true,“交易”:false,“http”:false,“http_latency”:200,“http_code”: 500,“ignore_routes”:[],“分析”:真,“错误”:真,“一个 lert_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": { }, "created_at": 1489390668484, "restart_time": 0, "unstable_restarts": 0, "versioning": null, "node_version": "6.10.0" } ]

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这仅输出我们需要更新的inquirer器模块的现有和最新可用版本,当前:版本: 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点

2022 年 8 月 6 日更新

我发现npm i -g pm2是 global install per user
这意味着如果另一个用户登录到服务器,他将不会安装 pm2 - 因为-g并不像我们希望的那样完全全局。

所以对于那些想要它完全全球化的人的解决方案:

配置pm2

  1. 创建文件夹c:\etc
  2. 在此文件夹中安装 pm2 cd c:\etc npm i pm2
  3. C:\etc\node_modules\.bin添加到系统变量PATH
  4. 键入pm2以初始化并创建.pm2文件夹
  5. 将其从C:\Users\USER\.pm2C:\etc\.pm2
  6. 设置一个新的系统变量(不是用户级别)名称: PM2_HOME值: c:\etc\.pm2

配置pm2

1. `npm i -g pm2` 2. 输入 `pm2` 初始化并创建 `.pm2` 文件夹 3. 将其从 `C:\Users\USER\.pm2` 复制到 `C:\etc\.pm2 ` 3. 设置一个新的系统变量(不是用户级别)名称:`PM2_HOME` 值:`c:\etc\.pm2`

使用 pm2 运行您的应用程序

  1. 运行您的 pm2 应用程序。 即: pm2 start app.js --name=MY_API
  2. pm2 save以创建当前正在运行的应用程序的转储。

测试应用

  1. 要测试一切正常,请尝试: pm2 kill然后pm2 resurrect (应用程序应该正在运行,检查pm2 status

在启动时运行

现在我们需要在启动时执行 resurrect 命令,所以:

  1. npm install -g @innomizetech/pm2-windows-service
  2. pm2-service-install -n PM2 --unattended

而已。

pm2-windows-startup如果您对它在登录时启动这一事实感到满意,那么它的效果很好。 如果您在服务器上重新启动(例如 Windows 更新),那么您就不走运了。

pm2-windows-service确实为我工作,使用@innomizetech fork,但我遇到了一些问题,可能是由于用户或其设置或其他原因。 基本上该服务会启动一个旧版本的已保存进程列表,即使我尝试过pm2 delete allpm2 start ecosystem.config.jspm2 save

我采用了一个非常简单的自制解决方案:

  1. C:\创建一个文件pm2-resurrect.sh ,其中包含单行pm2 resurrect
  2. 在任务计划程序中,添加一个在启动时运行的新任务,并选择无论用户是否登录都运行它。 此时您需要输入用户密码,该密码已保存以供后续运行。
  3. 设置任务命令执行文件C:\pm2-resurrect.sh

在我的例子中,我有 Git for Windows,它带有 bash,它打开文件并执行它。 我没有测试它,但我想你可以有一个具有相同内容的.cmd文件。

我尝试了以上所有方法都没有运气。 什么对我有用:

  1. 创建一个bat文件pm2 resurrect命令
  2. 创建该文件的快捷方式
  3. 将该快捷方式粘贴到启动文件夹(win+R,shell:startup)

最简单的方法,效果很好,希望对某些人有所帮助

  • 我在同一个文件夹中创建了一个批处理文件 *.bat
  • %windir%\system32\CMD.exe /k "start pm2 start myApp.js --name mySuperApp"
  • 在启动时创建的窗口“任务计划程序”效果很好......

请参阅pm2 安装程序

Readme 也清楚地说明了如何使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM