Windows: 自动启动 PM2 和节点应用程序
Windows: Auto start PM2 and node apps
在 Windows AWS 服务器上,我有一个 NODE 应用程序和
我正在使用 PM2 启动应用程序
我已经尝试过 NPM:"pm2-windows-startup" 和 "pm2-windows-service"
但是在我重新启动我的 AWS 实例后 运行
PM2 ls
列表中未显示任何节点应用...
我按照说明做了...
- 安装了 NPM(重启后 PM2 自动启动)
- PM2 启动 myApp.js --name mySuperApp
- PM2 保存
- 重启
- PM2 ls --> 没有 运行ning 节点应用程序? :-(
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:
总线套接字文件:\.\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 模式下启动执行序列 name:mySuperApp id:0
2017-03-13 07:37:48:
应用name:mySuperAppid: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:
总线套接字文件:\.\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":错误,
"treekill": 是的,
"autorestart":是的,
"automation":是的,
"pmx":是的,
"vizion": 是的,
"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",
"TEMP": "C:\Users\ADMINI~1\AppData\Local\Temp",
"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",
"Path": "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",
"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":错误,
"NODE_APP_INSTANCE": 0,
"vizion_running":错误,
"windir": "C:\Windows",
"USERPROFILE": "C:\Users\Administrator",
"USERNAME": "Administrator",
"USERDOMAIN_ROAMINGPROFILE": "EC2AMAZ-REBQJDK",
"USERDOMAIN": "EC2AMAZ-REBQJDK",
"TMP": "C:\Users\ADMINI~1\AppData\Local\Temp",
"TEMP": "C:\Users\ADMINI~1\AppData\Local\Temp",
"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",
"Path": "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",
"status": "online",
"pm_uptime": 1489390668484,
"axm_actions": [],
"axm_monitor":{
"Loop delay":{
"alert":{},
"agg_type": "avg",
"value":“36.91 毫秒”
}
},
"axm_options":{
"default_actions":是的,
"transactions":错误,
"http":错误,
"http_latency": 200,
"http_code": 500,
"ignore_routes": [],
"profiling": 是的,
"errors": 是的,
"alert_enabled": 是的,
"custom_probes": 是的,
"network":假的,
"ports":错误,
"ignoreFilter":{
"method": [
"OPTIONS"
],
"url": []
},
"excludedHooks": [],
"module_conf":{},
"module_name": "mySuperApp",
"module_version": "2.4.2",
"pmx_version": "1.0.3",
"error":真
},
"axm_dynamic":{},
"created_at": 1489390668484,
"restart_time": 0,
"unstable_restarts": 0,
"versioning":空,
"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 部分):
- 在
System environments
(不是用户环境)中添加并设置 PM2_HOME
。喜欢:PM2_HOME
= C:\NodeJS\npm
- 将
C:\NodeJS\npm
添加到现有的系统 PATH 变量(然后你确定它会起作用 - 有一些问题报告说 PM2_HOME
并不总是起作用)。
- 关闭所有终端并再次打开它们(以管理员身份)。您的终端 windows 现在会知道您的环境变化。
先决条件(第 3 部分):
- npm 安装 pm2 -g
- npm i pm2-windows-服务-g
- npm install -g npm-check-updates
目前包 pm2-windows-service
使用的模块中存在一个错误 - 所以让我们也解决这个问题,请按照以下步骤操作:
- 在终端
cd
进入:C:\NodeJS\npm\node_modules\pm2-windows-service
ncu inquirer
这仅输出我们需要更新的 inquirer
模块的现有版本和最新可用版本,当前:版本:1.1.2
--> 7.0.4
.
ncu inquirer -u
这将更新您的 packages.json 文件。
npm install
这将下载并更新 inquirer
模块(如果您未在 packages.json
文件中使用特定版本语法或您已手动更改,请注意 - -> 其他模块也会更新。
安装并设置 PM2(作为服务)在重启后自动启动:
- 在终端
cd
进入:C:\NodeJS\npm\node_modules\pm2-windows-service
pm2-service-install -n PM2_STARTUP_SCRIPT
(PM2_STARTUP_SCRIPT
将是 Windows 服务的 "Display name"。将其更改为您喜欢的并点击 ENTER
。)
- 执行环境设置(推荐)?
Yes
- 设置PM2_HOME?
No
(不需要 - 你已经设置好了)
- 设置PM2_SERVICE_SCRIPTS(pm2的启动脚本列表)?
Yes
- 设置启动列表scripts/files(分号分隔json config
文件或 js 文件)
ENTER
(当什么都不输入时 - 它将默认使用 PM2 的 dump.pm2
文件 - 这是你 运行 PM2 -f save
时创建的,我会 return 稍后解释)。
设置PM2_SERVICE_PM2_DIR(与服务一起使用的全局pm2的位置)? Yes
指定包含要使用的pm2版本的目录
服务? ENTER
PM2 服务已安装并启动。
- 在 Windows 中打开服务并将服务更改为 运行 管理员(或您喜欢的角色)。
设置您希望 PM2 启动的应用程序 - 关机或重启后:
pm2 start myApp.js --name mySuperApp
pm2 -f save
- 重新启动或者如果您使用 AWS(或任何其他云提供商)。重新启动您的实例 - 等待 5 分钟,然后登录机器并执行
pm2 ls
并检查您的应用程序是否已启动并 运行ning 约 5 分钟(不仅是几秒钟,因为您刚刚登录) .
从您的注册表中卸载并清理 "pm2-windows-startup"(如果您从我的 "old instruction" 切换到新的):
- npm uninstall pm2-windows-startup -g
- 从注册表中删除
PM2
项,如下图所示:
旧说明(不推荐):
我下面的旧答案仍然有效 - 但除非您登录机器,否则 PM2 不会启动,因为它从注册表加载 PM2 而不是 运行 它作为服务.
我不知道为什么 - 但经过几次尝试后成功了(在全新安装的 AWS Windows 2016 BASE 实例中)
- npm 安装 pm2 -g
- npm install pm2-windows-startup -g
- pm2-启动安装
- pm2 启动 myApp.js --name mySuperApp
- pm2 保存
- 重启
- pm2 ls
更新 06/2021
我发现本教程非常有用:
https://blog.cloudboost.io/nodejs-pm2-startup-on-windows-db0906328d75
使用 'nssm' 和 .bat 文件的第一种方法对我不起作用,
所以我遵循了方法 2:“解决方案 2:使用 pm2-windows-service”
但是,正如其他答案中提到的,pm2-windows-service
有一个错误,
这个叉子解决了:
https://www.npmjs.com/package/@innomizetech/pm2-windows-service
so 而不是旧包 (pm2-windows-service):
使用新的:
npm install -g @innomizetech/pm2-windows-service
这里是教程的简短摘要:
配置 pm2
npm i -g pm2
- 键入
pm2
以初始化并创建 .pm2
文件夹
- 将其从
C:\Users\USER\.pm2
复制到 C:\etc\.pm2
- 设置一个新的系统变量(非用户级别)名称:
PM2_HOME
值:c:\etc\.pm2
运行使用 pm2 连接您的应用程序
- 运行 你的 pm2 应用程序。即:
pm2 start app.js --name=MY_API
.
pm2 save
创建当前应用程序的转储 运行ning。
测试应用程序
- 要测试一切是否正常,请尝试:
pm2 kill
,然后是 pm2 resurrect
(应用程序应该是 运行ning,检查 pm2 status
)
运行 启动时
现在我们需要在启动时执行复活命令,所以:
npm install -g @innomizetech/pm2-windows-service
pm2-service-install -n PM2 --unattended
就是这样。
pm2-windows-startup
如果您同意它在登录时启动这一事实,那么效果很好。如果您在服务器上重新启动(比如 Windows 更新),那您就不走运了。
pm2-windows-service
确实对我有用,使用 @innomizetech
分支,但我遇到了一些问题,可能是由于用户或其设置或其他原因。基本上该服务会启动旧版本的已保存进程列表,即使我尝试了 pm2 delete all
、pm2 start ecosystem.config.js
、pm2 save
.
我采用了一个非常简单的自制解决方案:
- 在
C:\
中创建文件 pm2-resurrect.sh
,其中包含单行 pm2 resurrect
.
- 在 Task Scheduler 中,添加一个 运行 启动时的新任务,以及 select 无论用户是否登录都 运行 的任务。此时您需要输入用户密码,该密码将保存连续 运行 秒。
- 设置任务命令执行文件
C:\pm2-resurrect.sh
.
在我的例子中,我有 Git for Windows,它带有 bash,它打开文件并执行它。我没有测试它,但我想你可以有一个内容相同的 .cmd
文件。
我尝试了以上所有方法,但都没有成功。
什么对我有用:
- 使用
pm2 resurrect
命令创建一个 bat 文件
- 创建该文件的快捷方式
- 将该快捷方式粘贴到启动文件夹(win+R,shell:startup)
最简单的方法,效果很好,希望对某些人有所帮助
- 我在同一文件夹中创建了一个批处理文件 *.bat
%windir%\system32\CMD.exe /k "start pm2 start myApp.js --name mySuperApp"
- 已创建windows“任务计划程序”在启动时效果很好...
在 Windows AWS 服务器上,我有一个 NODE 应用程序和 我正在使用 PM2 启动应用程序
我已经尝试过 NPM:"pm2-windows-startup" 和 "pm2-windows-service"
但是在我重新启动我的 AWS 实例后 运行
PM2 ls
列表中未显示任何节点应用...
我按照说明做了...
- 安装了 NPM(重启后 PM2 自动启动)
- PM2 启动 myApp.js --name mySuperApp
- PM2 保存
- 重启
- PM2 ls --> 没有 运行ning 节点应用程序? :-(
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: 总线套接字文件:\.\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 模式下启动执行序列 name:mySuperApp id:0 2017-03-13 07:37:48: 应用name:mySuperAppid: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: 总线套接字文件:\.\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":错误, "treekill": 是的, "autorestart":是的, "automation":是的, "pmx":是的, "vizion": 是的, "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", "TEMP": "C:\Users\ADMINI~1\AppData\Local\Temp", "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", "Path": "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", "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":错误, "NODE_APP_INSTANCE": 0, "vizion_running":错误, "windir": "C:\Windows", "USERPROFILE": "C:\Users\Administrator", "USERNAME": "Administrator", "USERDOMAIN_ROAMINGPROFILE": "EC2AMAZ-REBQJDK", "USERDOMAIN": "EC2AMAZ-REBQJDK", "TMP": "C:\Users\ADMINI~1\AppData\Local\Temp", "TEMP": "C:\Users\ADMINI~1\AppData\Local\Temp", "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", "Path": "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", "status": "online", "pm_uptime": 1489390668484, "axm_actions": [], "axm_monitor":{ "Loop delay":{ "alert":{}, "agg_type": "avg", "value":“36.91 毫秒” } }, "axm_options":{ "default_actions":是的, "transactions":错误, "http":错误, "http_latency": 200, "http_code": 500, "ignore_routes": [], "profiling": 是的, "errors": 是的, "alert_enabled": 是的, "custom_probes": 是的, "network":假的, "ports":错误, "ignoreFilter":{ "method": [ "OPTIONS" ], "url": [] }, "excludedHooks": [], "module_conf":{}, "module_name": "mySuperApp", "module_version": "2.4.2", "pmx_version": "1.0.3", "error":真 }, "axm_dynamic":{}, "created_at": 1489390668484, "restart_time": 0, "unstable_restarts": 0, "versioning":空, "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 部分):
- 在
System environments
(不是用户环境)中添加并设置PM2_HOME
。喜欢:PM2_HOME
=C:\NodeJS\npm
- 将
C:\NodeJS\npm
添加到现有的系统 PATH 变量(然后你确定它会起作用 - 有一些问题报告说PM2_HOME
并不总是起作用)。 - 关闭所有终端并再次打开它们(以管理员身份)。您的终端 windows 现在会知道您的环境变化。
先决条件(第 3 部分):
- npm 安装 pm2 -g
- npm i pm2-windows-服务-g
- npm install -g npm-check-updates
目前包 pm2-windows-service
使用的模块中存在一个错误 - 所以让我们也解决这个问题,请按照以下步骤操作:
- 在终端
cd
进入:C:\NodeJS\npm\node_modules\pm2-windows-service
ncu inquirer
这仅输出我们需要更新的inquirer
模块的现有版本和最新可用版本,当前:版本:1.1.2
-->7.0.4
.ncu inquirer -u
这将更新您的 packages.json 文件。npm install
这将下载并更新inquirer
模块(如果您未在packages.json
文件中使用特定版本语法或您已手动更改,请注意 - -> 其他模块也会更新。
安装并设置 PM2(作为服务)在重启后自动启动:
- 在终端
cd
进入:C:\NodeJS\npm\node_modules\pm2-windows-service
pm2-service-install -n PM2_STARTUP_SCRIPT
(PM2_STARTUP_SCRIPT
将是 Windows 服务的 "Display name"。将其更改为您喜欢的并点击ENTER
。)- 执行环境设置(推荐)?
Yes
- 设置PM2_HOME?
No
(不需要 - 你已经设置好了) - 设置PM2_SERVICE_SCRIPTS(pm2的启动脚本列表)?
Yes
- 设置启动列表scripts/files(分号分隔json config
文件或 js 文件)
ENTER
(当什么都不输入时 - 它将默认使用 PM2 的dump.pm2
文件 - 这是你 运行PM2 -f save
时创建的,我会 return 稍后解释)。 设置PM2_SERVICE_PM2_DIR(与服务一起使用的全局pm2的位置)?
Yes
指定包含要使用的pm2版本的目录 服务?
ENTER
PM2 服务已安装并启动。
- 在 Windows 中打开服务并将服务更改为 运行 管理员(或您喜欢的角色)。
设置您希望 PM2 启动的应用程序 - 关机或重启后:
pm2 start myApp.js --name mySuperApp
pm2 -f save
- 重新启动或者如果您使用 AWS(或任何其他云提供商)。重新启动您的实例 - 等待 5 分钟,然后登录机器并执行
pm2 ls
并检查您的应用程序是否已启动并 运行ning 约 5 分钟(不仅是几秒钟,因为您刚刚登录) .
从您的注册表中卸载并清理 "pm2-windows-startup"(如果您从我的 "old instruction" 切换到新的):
- npm uninstall pm2-windows-startup -g
- 从注册表中删除
PM2
项,如下图所示:
旧说明(不推荐):
我下面的旧答案仍然有效 - 但除非您登录机器,否则 PM2 不会启动,因为它从注册表加载 PM2 而不是 运行 它作为服务.
我不知道为什么 - 但经过几次尝试后成功了(在全新安装的 AWS Windows 2016 BASE 实例中)
- npm 安装 pm2 -g
- npm install pm2-windows-startup -g
- pm2-启动安装
- pm2 启动 myApp.js --name mySuperApp
- pm2 保存
- 重启
- pm2 ls
更新 06/2021
我发现本教程非常有用: https://blog.cloudboost.io/nodejs-pm2-startup-on-windows-db0906328d75
使用 'nssm' 和 .bat 文件的第一种方法对我不起作用, 所以我遵循了方法 2:“解决方案 2:使用 pm2-windows-service”
但是,正如其他答案中提到的,pm2-windows-service
有一个错误,
这个叉子解决了:
https://www.npmjs.com/package/@innomizetech/pm2-windows-service
so 而不是旧包 (pm2-windows-service): 使用新的:
npm install -g @innomizetech/pm2-windows-service
这里是教程的简短摘要:
配置 pm2
npm i -g pm2
- 键入
pm2
以初始化并创建.pm2
文件夹 - 将其从
C:\Users\USER\.pm2
复制到C:\etc\.pm2
- 设置一个新的系统变量(非用户级别)名称:
PM2_HOME
值:c:\etc\.pm2
运行使用 pm2 连接您的应用程序
- 运行 你的 pm2 应用程序。即:
pm2 start app.js --name=MY_API
. pm2 save
创建当前应用程序的转储 运行ning。
测试应用程序
- 要测试一切是否正常,请尝试:
pm2 kill
,然后是pm2 resurrect
(应用程序应该是 运行ning,检查pm2 status
)
运行 启动时
现在我们需要在启动时执行复活命令,所以:
npm install -g @innomizetech/pm2-windows-service
pm2-service-install -n PM2 --unattended
就是这样。
pm2-windows-startup
如果您同意它在登录时启动这一事实,那么效果很好。如果您在服务器上重新启动(比如 Windows 更新),那您就不走运了。
pm2-windows-service
确实对我有用,使用 @innomizetech
分支,但我遇到了一些问题,可能是由于用户或其设置或其他原因。基本上该服务会启动旧版本的已保存进程列表,即使我尝试了 pm2 delete all
、pm2 start ecosystem.config.js
、pm2 save
.
我采用了一个非常简单的自制解决方案:
- 在
C:\
中创建文件pm2-resurrect.sh
,其中包含单行pm2 resurrect
. - 在 Task Scheduler 中,添加一个 运行 启动时的新任务,以及 select 无论用户是否登录都 运行 的任务。此时您需要输入用户密码,该密码将保存连续 运行 秒。
- 设置任务命令执行文件
C:\pm2-resurrect.sh
.
在我的例子中,我有 Git for Windows,它带有 bash,它打开文件并执行它。我没有测试它,但我想你可以有一个内容相同的 .cmd
文件。
我尝试了以上所有方法,但都没有成功。 什么对我有用:
- 使用
pm2 resurrect
命令创建一个 bat 文件 - 创建该文件的快捷方式
- 将该快捷方式粘贴到启动文件夹(win+R,shell:startup)
最简单的方法,效果很好,希望对某些人有所帮助
- 我在同一文件夹中创建了一个批处理文件 *.bat
%windir%\system32\CMD.exe /k "start pm2 start myApp.js --name mySuperApp"
- 已创建windows“任务计划程序”在启动时效果很好...