1.配置文件

使用 PM2 管理多个应用程序时,使用一个 JS 配置文件来组织它们。

1.1.生成配置

要生成示例配置文件,您可以键入以下命令:

  1. $ pm2 init simple

这将生成一个示例ecosystem.config.js

  1. module.exports = {
  2. apps : [{
  3. name : "app1",
  4. script : "./app.js"
  5. }]
  6. }

如果您正在创建自己的配置文件,请确保它以 结尾,.config.js以便 PM2 能够将其识别为配置文件。

1.2.作用于配置文件

与操作应用程序相比,您可以无缝启动/停止/重启/删除配置文件中包含的所有应用程序:

  1. # 启动所有应用程序
  2. pm2 start ecosystem.config.js
  3. # 停止一切
  4. pm2 stop ecosystem.config.js
  5. # 全部重新启动
  6. pm2 restart ecosystem.config.js
  7. # 全部重新加载
  8. pm2 reload ecosystem.config.js
  9. # 全部删除
  10. pm2 delete ecosystem.config.js

1.2.1.对特定过程采取行动

您还可以使用其名称和选项对特定应用程序进行操作--only <app_name>

  1. pm2 start ecosystem.config.js --only api-app

注意:该--only选项也适用于启动/重启/停止/删除

您甚至可以通过指定用逗号分隔的每个应用程序名称来指定要对其执行操作的多个应用程序:

  1. pm2 start ecosystem.config.js --only "api-app,worker-app"

1.3.切换环境

您可以通过该env_*选项指定不同的环境变量集。
例子:

  1. module.exports = {
  2. apps : [{
  3. name : "app1",
  4. script : "./app.js",
  5. env_production: {
  6. NODE_ENV: "production"
  7. },
  8. env_development: {
  9. NODE_ENV: "development"
  10. }
  11. }]
  12. }

现在要在不同环境中的变量之间切换,请指定--env [env name]选项:

pm2 start process.json --env production
pm2 restart process.json --env development

2.可用的属性

可以使用以下属性微调应用程序行为和配置:

2.1.一般的

字段 类型 例子 描述
name (string) “my-api” 应用程序名称(默认为不带扩展名的脚本文件名)
script (string) “./api/app.js” 相对于 pm2 start 的脚本路径
cwd (string) “/var/www/“ 将启动您的应用程序的目录
args (string) “-a 13 -b 12” 包含通过 CLI 传递给脚本的所有参数的字符串
interpreter (string) “/usr/bin/python” 解释器绝对路径(默认为节点)
interpreter_args (string) “–harmony” 传递给口译员的选项
node_args (string) interpreter_args 的别名

2.2.高级功能

Field Type Example Description
instances number -1 要启动的应用程序实例数
exec_mode string “cluster” 启动应用程序的模式,可以是“群集”或“分叉”,默认分叉
watch boolean or [] true 启用监视和重新启动功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
ignore_watch list [“[\/\\]\./“, “node_modules”] 通过监视功能忽略某些文件或文件夹名称的正则表达式列表
max_memory_restart string “150M” 如果应用程序超过指定的内存量,将重新启动应用程序。人性化的格式:可以是“10M”、“100K”、“2G”等…
env object {“NODE_ENV”: “development”, “ID”: “42”} 将显示在应用程序中的环境变量
env_ object {“NODE_ENV”: “production”, “ID”: “89”} 执行pm2重启时注入app.yml—env
source_map_support boolean true 默认为true,[启用/禁用源映射文件]
instance_var string “NODE_APP_INSTANCE” 见文档
filter_env array of string [ “REACT_” ] 排除以“REACT_”开头的全局变量,并且不允许它们渗透到集群中。

2.3.日志文件

Field Type Example Description
log_date_format (string) “YYYY-MM-DD HH:mm Z” log date format (see log section)
error_file (string) error file path (default to $HOME/.pm2/logs/XXXerr.log)
out_file (string) output file path (default to $HOME/.pm2/logs/XXXout.log)
combine_logs boolean true if set to true, avoid to suffix logs file with the process id
merge_logs boolean true alias to combine_logs
pid_file (string) pid file path (default to $HOME/.pm2/pid/app-pm_id.pid)

2.4.控制流

字段 类型 案例 描述
min_uptime (string) 要考虑启动的应用程序的最小正常运行时间
listen_timeout number 8000 如果应用程序未侦听,则强制重新加载之前的时间(毫秒)
kill_timeout number 1600 发送最终SIGKILL之前的时间(毫秒)
shutdown_with_message boolean false 使用process.send(’shutdown’)而不是process.kill(pid,SIGINT)关闭应用程序
wait_ready boolean false 等待process.send(’ready’),而不是重新加载等待侦听事件
max_restarts number 10 在您的应用被视为错误并停止重新启动之前,连续不稳定的重新启动次数(小于1秒的间隔或通过min_正常运行时间的自定义时间)
restart_delay number 4000 重新启动崩溃的应用程序之前的等待时间(以毫秒为单位)。默认值为0。
autorestart boolean false 默认情况下为true。如果为false,PM2将不会在应用程序崩溃或和平结束时重新启动应用程序
cron_restart string “1 0 *” 用于重新启动应用程序的cron模式。应用程序必须运行才能使cron功能正常工作
vizion boolean false 默认情况下为true。如果为false,PM2将在没有vizion功能(版本控制元数据)的情况下启动
post_update list [“npm install”, “echo launching the app”] 从Keymetrics仪表板执行拉入/升级操作后将执行的命令列表
force boolean true 默认为false。如果为true,则可以多次启动同一脚本,这通常是PM2不允许的

2.5.部署

条目名称 描述 类型 默认值
key SSH密钥路径 String $HOME/.ssh
user SSH用户 String
host SSH主机 [String]
ssh_options 没有命令行标志的SSH选项,请参阅“manssh” String or [String]
ref GIT远程/分支 String
repo GIT远程 String
path 服务器中的路径 String
pre-setup 本地计算机上脚本的预设置命令或路径 String
post-setup 在主机上发布脚本的设置命令或路径 String
pre-deploy-local 部署前行动 String
post-deploy 部署后行动 String

2.6.注意事项

使用 JSON 应用程序声明时传递的所有命令行选项都将被删除,即

2.6.1.CWD

cwd:您的 JSON 声明不需要与您的脚本一起存在。如果您希望在脚本以外的位置维护 JSON(s)(例如,/etc/pm2/conf.d/node-app.json),您将需要使用该cwd功能(注意,这对于使用符号链接的 capistrano 样式目录结构非常有用)。文件可以是相对于cwd目录的,也可以是绝对的(参见下面的示例)。