简介
在使用 Node.js 开发 Web 应用时,我们经常会使用到 PM2 这款进程管理工具,它可以让我们更方便地启动、停止、重启、监控 Node.js 应用。虽然在使用中我们通常可以通过命令行参数来配置 PM2 的行为,但是在工程化的开发中,我们需要把 PM2 的配置参数通过配置文件的形式来定义,这样可以提高开发效率并降低出错的风险。本文将介绍 PM2 配置文件的详细用法,让你更好的管理 Node.js 应用。
配置文件的格式
PM2 支持 JSON、YAML 和 JavaScript 三种格式的配置文件,这三种格式的配置文件都可以通过命令行参数 -i
或者 --interpreter
来指定 Node.js 运行时的解释器。
下面我们以 JSON 格式为例来介绍 PM2 配置文件的详细使用方法。
-- -------------------- ---- ------- -- --------------- - ------- - - ------- -------- --------- ----------- ------- ---------- --------- ------------ -- -------------- ----- -------- ------ --------------------- ----- ------------------ ----------- -------- --- ----------------- - ----------- ------------ - - - -
以上是一个 PM2 配置文件的例子,其中重要的部分都写在了 apps
数组中,下面我们逐一介绍这些配置参数的含义。
配置参数
name
应用程序的名称,方便我们后续对服务进行管理。
{ "name": "myapp" }
script
启动的脚本文件路径,该文件必须以 Node.js 的解释器启动,可以是绝对路径也可以是相对路径。
{ "script": "./app.js" }
args
传递给脚本的命令行参数,可以是单个参数或者多个参数的数组。
{ "args": ["--name", "world"] }
instances
应用程序的数量,可以是数字或者字符串,如果是字符串,可以用以下方式指定:
"max"
:启动与 CPU 核心数相同的应用程序实例"max-1"
:启动比 CPU 核心数少一个的应用程序实例"max-2"
:启动比 CPU 核心数少两个的应用程序实例
{ "instances": 2 }
autorestart
当应用程序发生异常时,是否自动重启,可以是以下值之一:
true
:默认值,自动重启false
:不自动重启"always"
:无论何时,都要自动重启"never"
:永不自动重启"unexpected"
:仅在 exit code 不等于 0 时自动重启"unhandled"
:仅在应用程序抛出未被捕获的异常时自动重启
{ "autorestart": true }
watch
是否监控文件变化重启应用程序,可以是以下值之一:
true
:监控文件变化并自动重启false
:默认值,不监控文件变化string
:监控指定文件夹或者文件
{ "watch": false }
max_memory_restart
当应用程序内存使用量超过指定值时,自动重启应用程序。可以使用以下格式设置:
number
:以字节为单位指定最大内存使用量string
:以人类可读的形式指定最大内存使用量,例如1K
、1M
、1G
{ "max_memory_restart": "1G" }
log_date_format
日志的日期格式,默认是 YYYY-MM-DD HH:mm:ss ZZ
。
{ "log_date_format": "YYYY-MM-DD HH:mm:ss Z" }
environment
指定 Node.js 运行环境参数。
{ "env_production": { "NODE_ENV": "production" } }
使用配置文件启动 Node.js 应用
当编写好 PM2 配置文件之后,我们可以通过以下命令来启动 Node.js 应用:
pm2 start pm2.config.json
其中 pm2.config.json
是我们保存配置文件的文件名,如果你选择了 YAML 或者 JavaScript 格式的配置文件,同样可以通过 pm2 start
命令来启动。
总结
本文介绍了 PM2 配置文件的详细用法,我们可以通过配置文件的方式更方便地管理 Node.js 应用。在实际开发中,我们需要根据应用的需求来配置 PM2,这样可以加快我们的开发效率,同时也能保证应用的稳定性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e5daf9f6b2d6eab3156dcc