Ubuntu16.0.4 PM2 学习笔记(待补充)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yh0503/article/details/85229241

概述

简介

PM2(Process Manager 2 )是具有内置负载均衡器的Node.js应用程序的生产运行时和进程管理器。 它允许您永久保持应用程序活跃,无需停机即可重新加载它们,并促进常见的Devops任务。


主要特性:

  • 内建负载均衡(使用Node cluster 集群模块)
  • 后台运行
  • 0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
  • 具有Ubuntu和CentOS 的启动脚本
  • 停止不稳定的进程(避免无限循环)
  • 控制台检测
  • 提供 HTTP API
  • 远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

官方描述主要特性:

  • 持久化:一旦开始使用,您的应用将达到持久化,在崩溃和机器重启时自启动。
  • 流程管理:您所有的应用都被守护进程,例如,在后台持续运行。
  • 日志管理:应用程序日志保存在服务器的硬盘中~/.pm2/logs/
  • 负载均衡:PM2可以通过创建共享同一服务器端口的多个子进程来扩展您的应用程序。这样做还允许您以零秒停机时间重新启动应用程序。
  • 终端监控:可以在终端中监控您的应用程序并检查应用程序运行状况(CPU使用率,使用的内存,请求/分钟等)。
  • SSH部署:自动部署,避免逐个在所有服务器中进行ssh。
  • 静态服务:支持静态服务器功能

多平台支持:适用于Linux(稳定)和macOS(稳定)和Windows(稳定)

作者:cs380637384
来源:CSDN
原文:https://blog.csdn.net/cs380637384/article/details/82682799
版权声明:本文为博主原创文章,转载请附上博文链接!

指南

安装

使用Root账户全局安装pm2

npm install pm2 -g

目录介绍

pm2安装好后,会自动创建下面目录。看文件名基本就知道干嘛的了,就不翻译了。

  • $HOME/.pm2 will contain all PM2 related files
  • $HOME/.pm2/logs will contain all applications logs
  • $HOME/.pm2/pids will contain all applications pids
  • $HOME/.pm2/pm2.log PM2 logs-
  • $HOME/.pm2/pm2.pid PM2 pid
  • $HOME/.pm2/rpc.sock Socket file for remote commands
  • $HOME/.pm2/pub.sock Socket file for publishable events
  • $HOME/.pm2/conf.js PM2 Configuration

入门教程

快速开始

参考中文文档:传送门
参考官方文档:传送门(建议看这个)
在这里插入图片描述

常用指令

启动

参数说明:

  • --watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。
  • -i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。-
    --ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如–ignore-watch=“test node_modules “some scripts””
  • -n --name:应用的名称。查看应用信息的时候可以用到。
  • -o --output <path>:标准输出日志文件的路径。
  • -e --error <path>:错误输出日志文件的路径。
  • --interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python…)。比如你用的coffee script来编写应用。

示例:

pm2 start app.js --watch -i 2

完整参数列表:

   -h, --help                           output usage information
   -V, --version                        output the version number
   -v --version                         get version
   -s --silent                          hide all messages
   -m --mini-list                       display a compacted list without formatting
   -f --force                           force actions
   -n --name &lt;name&gt;                     set a &lt;name&gt; for script
   -i --instances &lt;number&gt;              launch [number] instances (for networked app)(load balanced)
   -l --log [path]                      specify entire log file (error and out are both included)
   -o --output &lt;path&gt;                   specify out log file
   -e --error &lt;path&gt;                    specify error log file
   -p --pid &lt;pid&gt;                       specify pid file
   --max-memory-restart &lt;memory&gt;        specify max memory amount used to autorestart (in megaoctets)
   --env &lt;environment_name&gt;             specify environment to get specific env variables (for JSON declaration)
   -x --execute-command                 execute a program using fork system
   -u --user &lt;username&gt;                 define user when generating startup script
   -c --cron &lt;cron_pattern&gt;             restart a running process based on a cron pattern
   -w --write                           write configuration in local folder
   --interpreter &lt;interpreter&gt;          the interpreter pm2 should use for executing app (bash, python...)
   --log-date-format &lt;momentjs format&gt;  add custom prefix timestamp to logs
   --no-daemon                          run pm2 daemon in the foreground if it doesn't exist already
   --merge-logs                         merge logs from different instances but keep error and out separated
   --watch                              watch application folder for changes
   --ignore-watch &lt;folders|files&gt;       folder/files to be ignored watching, chould be a specific name or regex - e.g. --ignore-watch="test node_modules "some scripts""
   --node-args &lt;node_args&gt;              space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation"
   --no-color                           skip colors
   --no-vizion                          skip vizion features (versioning control)
   --no-autorestart                     do not automatically restart apps

重启、重载

重启

pm2 restart app.js

0秒停机重新加载

pm2 reload app.js        //重新启动所有进程,始终保持至少一个进程在运行
pm2 gracefulReload all   //优雅地以群集模式重新加载所有应用程序

停止

停止特定的应用。可以先通过pm2 list获取应用的名字(–name指定的)或者进程id。

pm2 stop all               //停止所有应用
pm2 stop [AppName]        //根据应用名停止指定应用
pm2 stop [ID]             //根据应用id停止指定应用

删除

pm2 delete all               //关闭并删除应用
pm2 delete [AppName]        //根据应用名关闭并删除应用
pm2 delete [ID]            //根据应用ID关闭并删除应用

查看进程状态

pm2 list

查看某个进程的信息

 pm2 describe 0

显示应用程序信息

pm2 show [Name]      //根据name查看
pm2 show [ID]        //根据id查看

日志查看

默认情况下,所有日志都被保存到 $HOME/.pm2/logs

pm2 logs            //查看所有应用日志
pm2 logs [Name]    //根据指定应用名查看应用日志
pm2 logs [ID]      //根据指定应用ID查看应用日志
pm2 flush	//清空所有应用日志

output 只是标准输出 (console.log)
error 只是错误输出 (console.error)
log 结合了 output 和 error, 默认是禁用的

配置文件

生成配置文件

cd到你的工程目录,输入如下指令,生成实例的Javascript格式的配置文件。(.config.js文件)

pm2 ecosystem        //生成一个示例JSON配置文件
pm2 init

在这里插入图片描述


配置文件这块支持JavaScript格式、Json格式、Json5格式、Yaml格式,这里我只列Json格式。具体参考帮助文档:传送门

JSON格式

具体参数配置参考地址:传送门

{
  "apps" : [{
    "name"        : "worker",
    "script"      : "./worker.js",
    "watch"       : true,
    "env": {
      "NODE_ENV": "development"
    },
    "env_production" : {
       "NODE_ENV": "production"
    }
  },{
    "name"       : "api-app",
    "script"     : "./api.js",
    "instances"  : 4,
    "exec_mode"  : "cluster"
  }]
}

自动重启(监听模式)

这里是监控整个项目的文件,如果只想监听指定文件和目录,建议通过配置文件的watchignore_watch字段来设置。详细的配置请查看官方文档:传送门

pm2 start app.js --watch  //当文件发生变化,自动重启

开机启动

pm2 startup

学习资源

PM2 官方文档:传送门
PM2中文文档资源:传送门

猜你喜欢

转载自blog.csdn.net/yh0503/article/details/85229241
今日推荐