【问题标题】:Windows: Auto start PM2 and node appsWindows:自动启动 PM2 和节点应用程序
【发布时间】:2017-03-13 08:12:33
【问题描述】:

在 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\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", “看”:假的, “treekill”:是的, “自动重启”:是的, “自动化”:是的, “pmx”:是的, “视觉”:是的, "name": "mySuperApp", “节点参数”:[], "pm_exec_path": "c:\mypath\mySuperApp\server.js", “环境”:{ "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", "系统驱动器": "C:", "SESSIONNAME": "RDP-Tcp#1", "公共": "C:\Users\Public", "PSModulePath": "C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86)\AWS Tools\PowerShell\", "提示": "$P$G", "ProgramW6432": "C:\Program 文件", "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": "真", "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", “操作系统”:“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", “计算机名”:“EC2AMAZ-REBQJDK”, "CommonProgramW6432": "C:\Program Files\Common Files", "CommonProgramFiles(x86)": "C:\Program Files (x86)\Common Files", "CommonProgramFiles": "C:\Program Files\Common Files", “客户名称”:“THESILVERFOX”, "APPDATA": "C:\Users\Administrator\AppData\Roaming", "ALLUSERSPROFILE": "C:\ProgramData", "PM2_HOME": "C:\Users\Administrator\.pm2", “我的超级应用”:{} }, "pm_cwd": "c:\mypath\mySuperApp", "exec_interpreter": "节点", "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": "管理员", "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", "系统驱动器": "C:", "SESSIONNAME": "RDP-Tcp#1", "公共": "C:\Users\Public", "PSModulePath": "C:\Program Files\WindowsPowerShell\Modules;C:\Windows\system32\WindowsPowerShell\v1.0\Modules;C:\Program Files (x86)\AWS Tools\PowerShell\", "提示": "$P$G", "ProgramW6432": "C:\Program 文件", "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": "真", "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", “操作系统”:“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", “计算机名”:“EC2AMAZ-REBQJDK”, "CommonProgramW6432": "C:\Program Files\Common Files", "CommonProgramFiles(x86)": "C:\Program Files (x86)\Common Files", "CommonProgramFiles": "C:\Program Files\Common Files", “客户名称”:“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”:“平均”, “值”:“36.91 毫秒” } }, “axm_options”:{ “default_actions”:是的, “交易”:假, “http”:错误, “http_latency”:200, “http_code”:500, “忽略路由”:[], “分析”:是的, “错误”:是的, “alert_enabled”:真, “custom_probes”:是的, “网络”:假, “端口”:错误, “忽略过滤器”:{ “方法”: [ “选项” ], “网址”:[] }, “排除钩子”:[], “module_conf”:{}, "module_name": "mySuperApp", "module_version": "2.4.2", "pmx_version": "1.0.3", “错误”:是的 }, “axm_dynamic”:{}, “created_at”:1489390668484, “重启时间”:0, “unstable_restarts”:0, “版本控制”:空, “node_version”:“6.10.0” } ]

【问题讨论】:

    标签: node.js windows restart pm2


    【解决方案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 install 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. 指定包含要由 服务? 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 install pm2 -g
    2. npm install pm2-windows-startup -g
    3. pm2-启动安装
    4. pm2 start myApp.js --name mySuperApp
    5. pm2 保存
    6. 重启
    7. pm2 ls

    【讨论】:

    • 感谢这位朋友。在我们的办公室使用它。
    • 是的,我的朋友使用 Windows,它对我有很大帮助:)
    • 像魅力一样工作。
    • 只有在我登录到我的 Windows 服务器时才对我有用。如果我没有登录到我的服务器,则 pm2 没有启动。
    • 注意:“PM2 ls”只会列出由同一用户启动和保存的进程。我意识到 - 在 Ubuntu 上玩 PM2 时。
    【解决方案2】:

    2021 年 6 月更新

    我发现本教程非常有用: 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

    所以代替旧包(pm2-windows-service): 使用新的:

    npm install -g @innomizetech/pm2-windows-service

    这里是教程的简短摘要:

    配置 pm2

    1. npm i -g pm2
    2. 键入pm2 以初始化并创建.pm2 文件夹
    3. 将其从C:\Users\USER\.pm2复制到C:\etc\.pm2
    4. 设置一个新的系统变量(不是用户级别)名称: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 检查)

    启动时运行

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

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

    就是这样。

    【讨论】:

    • 在“pm2-service-install -n PM2 --unattended”之后,我在服务列表中看不到 PM2 服务。其他人有这个问题吗?
    【解决方案3】:

    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 文件。

    【讨论】:

    • 你必须使用:“pm2 -f save”。否则它不会清除现有列表(旧的应用程序列表)。 “pm2 save”仅在您更新实际列表并且它包含某些内容时才有用。要点:总是你“pm2 -f save”:)
    • 这个解决方案是救星。它就像一个魅力。另一个提示是将环境变量 PM2_HOME 设置为 c:\users\<user>\.pm2 或类似的东西。这将帮助PM2 resurrect 从该位置获取转储文件。还要重启机器以使该方案工作,但如果无法重启,请手动运行创建的计划任务。
    【解决方案4】:

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

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

    【讨论】:

    • 它确实会在登录时弹出一个 CMD 窗口,但对于那些不需要在登录前运行 PM2 的人来说,这种方法比pm2-windows-service 的缺点要少得多。
    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多