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

zfciruhq  于 2023-01-25  发布在  Node.js
关注(0)|答案(6)|浏览(189)

在Windows AWS服务器上,我有一个NODE应用程序,我使用PM2启动该应用程序
我试过国家预防机制:"pm2-窗口启动"和"pm2-窗口服务"
但在我重新启动AWS示例并运行

PM2 ls

列表中未显示节点应用程序...

    • 我按照指示行事**

1.已安装NPM(因此PM2在重启后自动启动)

  1. PM2启动myApp.js--名称为mySuperApp
  2. PM2保存
    1.重启
  3. PM2 ls--〉没有正在运行的节点应用程序?:-(
    • PM2日志不包含任何内容...**

我还没有添加任何ENV变量显式(当我尝试PM2无法启动任何更多-所以我创建了一个新的AWS Windows示例,并安装每一件事从头开始再次...)
PM2位于默认位置(我没有更改任何路径)

C:\Users\Administrator\.pm2
    • 我的PM2文件包含:**

2017年3月13日07时37分48秒:========================================================================= 2017年3月13日07时37分48秒:- --新的PM2后台程序已启动------------------------------------------------------
2017年3月13日07时37分48秒:时间:2017年3月13日星期一07:37:48 GMT +0000(协调世界时)2017年3月13日07:37:48:PM2版本:2.4.2 2017年3月13日07:37:48:Node.js版本:6.10.0 2017年3月13日07:37:48:当前拱形:x64 2017年3月13日07:37:48:网站首页:C:\用户\管理员. pm2 2017 - 03 - 13 07:37:48:PM2 PID文件:C:\用户\管理员. pm2\pm2.pid 2017 - 03 - 13 07:37:48:RPC套接字文件:.\管道\rpc.袜子2017 - 03 - 13 07:37:48:总线套接字文件:.\管道\出版袜子2017 - 03 - 13 07:37:48:应用程序日志路径:C:\用户\管理员. pm2\logs 2017 - 03 - 13 07:37:48:进程转储文件:C:\用户\管理员. pm2\转储. pm2 2017 - 03 - 13 07:37:48:并发操作:2 2017年3月13日07时37分48秒:SIGTERM超时:16时2017年3月13日07时37分48秒:===============================================================================
2017年3月13日07时37分48秒:在分叉模式下启动执行序列-应用程序名称:mySuperApp ID:0 2017 - 03 - 13 07:37:48:应用名称:我的超级应用编号:0上线2017 - 03 - 13 07:40:45:===============================================================================
2017年3月13日07时40分45秒:- --新的PM2守护程序启动--------------------------------------------------2017 - 03 - 13 07:40:45:时间:2017年3月13日星期一07:40:45 GMT +0000(协调世界时)2017年3月13日07:40:45:PM2版本:2.4.2 2017年3月13日07:40:45:Node.js版本:6.10.0 2017年3月13日07:40:45:当前拱形:x64 2017年3月13日07:40:45:网站首页:C:\用户\管理员. pm2 2017 - 03 - 13 07:40:45:PM2 PID文件:C:\用户\管理员. pm2\pm2.pid 2017 - 03 - 13 07:40:45:RPC套接字文件:.\管道\rpc.袜子2017 - 03 - 13 07:40:45:总线套接字文件:.\管道\出版袜子2017 - 03 - 13 07:40:45:应用程序日志路径:C:\用户\管理员. pm2\logs 2017 - 03 - 13 07:40:45:进程转储文件:C:\用户\管理员. pm2\转储. pm2 2017 - 03 - 13 07:40:45:并发操作:2 2017年3月13日07时40分45秒:SIGTERM超时:16时2017年3月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", "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": 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", "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.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": {}, "created_at": 1489390668484, "restart_time": 0, "unstable_restarts": 0, "versioning": null, "node_version": "6.10.0" } ]

z18hc3ub

z18hc3ub1#

    • 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_HOMEPM2_HOME = C:\NodeJS\npm
1.将C:\NodeJS\npm添加到现有的系统PATH变量中(然后您可以确定它将工作-有一些问题报告PM2_HOME并不总是工作)。
1.关闭所有终端,然后以管理员身份再次打开。您的终端窗口现在将知道您的环境更改。

    • 先决条件(第3部分):**
  1. npm安装pm2-g
  2. npm i pm2- windows 服务-g
  3. npm安装-g npm检查更新
    目前在包pm2-windows-service使用的模块中有一个bug-所以我们也可以修复这个bug,请按照以下步骤操作:
    1.在端子cd中输入:x1米11米1x
  4. ncu inquirer这只输出我们需要更新的inquirer模块的现有版本和最新可用版本,当前:版本号:1.1.2--〉7.0.4
  5. ncu inquirer -u这将更新您的packages.json文件。
  6. npm install这将下载并更新inquirer模块(请注意,如果您没有在packages.json文件中使用特定的版本语法,或者您已经手动进行了更改--〉其他模块也将被更新。
    • 安装并设置PM2(作为服务),使其在重新启动后自动启动:**

1.在端子cd中输入:C:\NodeJS\npm\node_modules\pm2-windows-service

  1. pm2-service-install -n PM2_STARTUP_SCRIPTPM2_STARTUP_SCRIPT将是Windows服务的"显示名称"。将其更改为您喜欢的名称,然后单击ENTER。)
    1.执行环境设置(推荐)?Yes
    1.设置PM2_HOME?No(不需要-您已经设置了)
    1.设置PM2_SERVICE_SCRIPTS(pm2的启动脚本列表)?Yes
    1.设置启动脚本/文件列表(分号分隔的json配置文件或js文件)ENTER(当什么都不输入时-默认使用PM2的dump.pm2文件-这是在运行PM2 -f save时创建的,稍后我将返回并解释)。
    1.设置PM2_SERVICE_PM2_DIR(要与服务一起使用的全局pm2的位置)?Yes
    1.指定包含服务要使用的pm2版本的目录?ENTER
    • PM2服务已安装并启动。**

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

    • 设置您希望PM2启动的应用程序-关机时或重新启动后:**
  1. pm2 start myApp.js --name mySuperApp
  2. pm2 -f save
    1.重新启动或如果你使用AWS(或任何其他云提供商)。重新启动你的示例-等待5分钟,然后登录到机器并执行pm2 ls,检查你的应用程序是否已经启动并运行了~5分钟(而不仅仅是几秒钟,因为你刚刚登录)。
    • 卸载并清理"pm2-windows-startup"从您的注册表(如果您从我的"旧指令"切换到新的):**
  1. npm卸载pm2-窗口-启动-g
    1.从注册表中删除PM2项,如下图所示:

    • 旧说明(不推荐):**
    • 我下面的旧答案仍然有效-但PM2不会启动,除非您登录到计算机,因为它从注册表加载PM2,并且不会将其作为服务运行。**

我不知道为什么-但经过几次尝试,这工作(在一个新安装的AWS Windows 2016 BASE示例)

  1. npm安装pm2-g
  2. npm安装pm2-窗口-启动-g
  3. pm2-启动安装
  4. pm2启动myApp.js--名称为mySuperApp
  5. pm2保存
    1.重新启动
  6. PM2激光
eeq64g8w

eeq64g8w2#

2022年6月8日更新

我发现npm i -g pm2是全局安装每个用户
这意味着,如果另一个用户登录到服务器,他将不会安装pm2-因为-g并不像我们希望的那样是完全全局的。
所以对于那些希望它完全全球化的人来说,解决方案是:

配置pm2

1.创建文件夹c:\etc
1.安装pm2在这个文件夹cd c:\etcnpm i pm2
1.将C:\etc\node_modules\.bin添加到系统变量PATH
1.键入pm2以初始化并创建.pm2文件夹
1.将其从C:\Users\USER\.pm2复制到C:\etc\.pm2
1.设置新的系统变量(非用户级别)名称: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:\等\平方分'

使用pm2运行应用程序

1.运行您的pm2应用程序。即:pm2 start app.js --name=MY_API .

  1. 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
    就是这样。
eivgtgni

eivgtgni3#

pm2-windows-startup可以很好地工作,如果你接受它是在登录时启动的事实。如果你在服务器上重新启动(比如Windows Update),你就不走运了。
pm2-windows-service确实适合我,使用@innomizetech fork,但我遇到了一些问题,可能是由于用户或它的设置,或其他原因。基本上,服务将启动旧版本的已保存进程列表,即使我尝试了pm2 delete allpm2 start ecosystem.config.jspm2 save
我采取了一个非常简单的自制解决方案:
1.在C:\中创建一个文件pm2-resurrect.sh,其中包含单行pm2 resurrect
1.在任务计划程序中,添加一个在 Boot 时运行的新任务,并选择无论用户是否登录都运行该任务。此时需要键入用户密码,该密码将被保存以供后续运行。
1.设置任务命令以执行文件C:\pm2-resurrect.sh
在我的例子中,我有Git for Windows,它自带bash,可以打开文件并执行它,我没有测试它,但我想你可以有一个.cmd文件具有相同的内容。

nue99wik

nue99wik4#

我尝试了以上所有方法,但都没有成功。对我有效的是:
1.使用pm2 resurrect命令创建bat文件
1.创建该文件的快捷方式
1.将快捷方式粘贴到启动文件夹(win+R,shell:启动)

bt1cpqcv

bt1cpqcv5#

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

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

vbopmzt16#

参见pm2-安装程序
自述文件也是要弄清楚如何使用它。

相关问题