zoukankan      html  css  js  c++  java
  • node程序的部署神器pm2的基本使用

    pm2是从nodejs衍生出来的服务器进程管理工具,可以做到开机就启动nodejs。当然了,也可以用nohup来做这件事情的。

    前言

    众所周知,Node.js运行在Chrome的JavaScript运行时平台上,我们把该平台优雅地称之为V8引擎。不论是V8引擎,还是之后的Node.js,都是以单线程的方式运行的,因此,在多核心处理器的系统中并不能发挥其最大的性能。

    Node.js的cluster模块

    幸运的是,Node.js给我们提供了cluster模块,它可以生成多个工作线程来共享同一个TCP连接。

    它是如何运作的呢?

    首先,Cluster会创建一个master,然后根据你指定的数量复制出多个server app(也被称之为工作线程)。它通过IPC通道与工作线程之间进行通信,并使用内置的负载均衡来更好地处理线程之间的压力,该负载均衡使用了Round-robin算法(也被称之为循环算法)。

    当使用Round-robin调度策略时,master accepts()所有传入的连接请求,然后将相应的TCP请求处理发送给选中的工作线程(该方式仍然通过IPC来进行通信)。

     

    用PM2的方式

    PM2内置的cluster功能,内部包含了所有上述的处理逻辑,因此你不必对代码做任何修改。Cluster模块的功能非常强大,使用PM2会使它变得更加容易。

     

    把pm2加入开机启动

    一般来说,pm2 startup即可,会根据当前系统自动识别加入开机启动项的方式。因为不同系统的情况下,开机启动项的加载方式是不一样的。当然,你也可以指定一下当前系统的类型。具体可以参考相关文档。

    想要PM2在服务器重启后自动运行之前的应用,可以先通过pm2 start启动你的应用,然后执行下面的命令:

    pm2 save

    这将在~/.pm2目录下生成一个dump.pm2文件,里面描述了当前PM2上运行着的所有应用。然后执行命令:

    pm2 startup [platform]

    注意有必要添加可选参数platform以明确告知pm2当前的系统环境。这样,下次当服务器重启时,PM2会自动运行之前保存的应用。

    当然,这里也可以指定startup的启动用户,例如:

    pm2 startup -u sunan

    这样指定的话,pm2的启动身份,就是sunan,而不是root了。

    非常遗憾的是Windows对pm2 支持不够友好,startup 的方式在 Windows 系统下并不支持,官方的文档:

    我们可以用Windows自带的启动 ,比如把启动这个程序的命令放进bat脚本。 

    1. 在cmd中输入“gpedit.msc”,打开“组策略”窗口。 
    2. 依次“计算机配置→Windows设置→脚本(启动/关机)”节点。
    3. 双击右侧详细资料窗格中的“启动”项目,单击“添加”按钮。
    4. 将你所写的bat脚本添加为新的计算机启动脚本。

    启动任务

    cd到对应目录后,使用pm2 start命令启动对应js,并保存。

    pm2 start <js文件相对路径>
    pm2 start <json的任务描述文件相对路径>
    pm2 start server/app.js
    pm2 start server/app.json

    上面的命令,需要您根据实际情况任选一条。

    pm2 save

    pm2 start 这个命令是重点,整个部署的核心所在。再说一下pm2 start的几种变形,常规上来说,一般跟的是js的文件路径,或者是个json描述文件,甚至是个sh文件。

    pm2 save的这个命令实际上会把当前pm2 start的情况写入到配置文件中。

     

    查看所有pm2任务及删除pm2任务

    pm2 list
    pm2 delete <task name>

    如下图:

    上述操作完成后,你如果再次重新启动服务器的话,就会发现,你的nodejs网站已经自动为你启动完成了。

     

  • 相关阅读:
    关于MySQL慢日志,你想知道的都在这
    h5 唤起app或跳转appStore
    ios 报错 Invalid row height provided by table delegate. Value must be at least 0.0, or UITableViewAutomaticDi......
    url的长度问题
    CUICatalog: Invalid asset name supplied:
    -[UITableView copyWithZone:]: unrecognized selector sent to instance 0x7XXXXXX00
    iOS项目运行出现:[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object
    UICachedDeviceRGBColor CGImage]: unrecognized selector sent to instance 0xxxxxxxxxxx'
    iOS Xcode 10: Multiple commands produce
    2019 开篇
  • 原文地址:https://www.cnblogs.com/bq-med/p/9012344.html
Copyright © 2011-2022 走看看