PM2 模块
PM2 模块是由 PM2 安装和管理的独立软件。 这些软件从 NPM 仓库中拉取,并在 NPM 上作为通用的 Javascript 库发布。
任何人都可以创建和发布模块。 模块可以是 日志轮转模块、独立的 http 代理、负载均衡器、基于 Node.js 的维基百科、DNS 服务器或任何类型的实用程序。 您的创造力是无限的!
管理模块
管理模块非常简单
# Install
pm2 install <module-name>
# Update a module
pm2 install <module-name>
# Install a module from GitHub (username/repository)
pm2 install pm2-hive/pm2-docker
# Force module restart
pm2 restart <module-name>
# Get more information
pm2 describe <module-name>
# Install a module in dev mode from local folder
pm2 install .
# Generate a module boilerplate
pm2 module:generate <module-name>
# Uninstall module
pm2 uninstall <module-name>
# Publish new module (Inc Semver + Git push + NPM publish)
pm2 publish
创建模块
要生成模块示例
pm2 module:generate <module-name>
现在让我们用 PM2 运行这个模块
cd <module-name>
pm2 install .
您现在可以编辑源代码,当您更改某些内容时,PM2 将自动重启模块(已激活 watch 选项)。
要显示模块日志
pm2 logs <module-name>
要删除模块
pm2 uninstall <module-name>
Package.json 中的语法糖
可以在 package.json 文件中添加补充信息。
您可以在 config
属性下定义配置值,并像普通的 pm2 管理进程 一样定义模块行为。
示例
{
"name": "pm2-logrotate", // Used as the module name
"version": "1.0.0", // Used as the module version
"description": "my desc", // Used as the module comment
"dependencies": {
"pmx": "latest"
},
"config": { // Default configuration values
// These values can be overridden with `pm2 set <module-name>:<attr> <val>`
"days_interval" : 7, // These value is returned once you call pmx.initModule()
"max_size" : 5242880
},
"apps" : [{ // Module behavior options
"script" : "index.js",
"merge_logs" : true,
"max_memory_restart" : "200M"
}],
"author": "Gataca Sanders",
"license": "MIT"
}
模块入口点
在您的主模块入口点中,调用 pmx.initModule(opts, fn(){});
来初始化您的模块
var pmx = require('pmx');
var conf = pmx.initModule({
// Override PID to be monitored
pid : pmx.resolvePidPaths(['/var/run/redis.pid']),
}, function(err, conf) {
// Now the module is initialized
require('./business_logic.js')(conf);
});
额外显示
安装模块后,您可以更改 PM2 的行为,使其不列出您的进程,而是显示一个包含您想要内容的表格。
要启用此行为,请编辑 package.json 并添加 env 部分,将 PM2_EXTRA_DISPLAY 设置为 true
package.json
{
[...]
"apps" : [{
"script" : "index.js",
"env" : {
"PM2_EXTRA_DISPLAY" : "true"
}
}],
[...]
}
然后在您的代码中
var pmx = require('pmx');
pmx.configureModule({
human_info : [
['Status' , 'Module ready'],
['Comment', 'This is a superb comment the user should see'],
['IP' , 'my machine ip!']
]
});
然后,您将能够在安装模块时看到这种表格!
.
模块配置
在 package.json 中,您可以在 config
属性下声明模块可访问的默认选项。 这些值可以被 PM2 或 Keymetrics 覆盖。
默认值
在 package.json 的 “config” 属性下添加默认配置值
{
[...]
"config": { // Default configuration value
"days_interval" : 7, // -> returned from var ret = pmx.initModule()
"max_size" : 5242880 // -> e.g. ret.max_size
}
[...]
}
然后可以通过 pmx.initModule() 返回的数据访问这些值。
示例
var conf = pmx.initModule({[...]}, function(err, conf) {
// Now we can read these values
console.log(conf.days_interval);
});
更改值
更改模块的默认值很简单,只需执行
pm2 set module_name:option_name <new_value>
示例
pm2 set server-monitoring:days_interval 2
- 注意 1:这些变量写入在
~/.pm2/module_conf.json
中,您也可以手动编辑它 - 注意 2:您可以通过
pm2 conf [module-name]
显示配置变量 - 注意 3:当您设置新值时,目标模块会自动重启
- 注意 4:类型转换是自动的(布尔值、数字、字符串)
发布模块
更新或发布模块非常简单。 pm2 publish
命令将增加模块的次版本号,将执行 git add . ; git commit -m "VERSION"; git push origin master
,然后将执行 npm publish
。
cd my-module
pm2 publish
模块 <3 Keymetrics
使用 Keymetrics,您可以创建一个自定义界面,其中包含指标监控和远程操作。
这将为您提供以下结果
pmx.initModule 的选项
var pmx = require('pmx');
var conf = pmx.initModule({
[...]
// Customize look and feel of this module
widget : {
// Logo to be displayed on the top left block (must be https)
logo : 'https://image.url',
theme : ['#9F1414', '#591313', 'white', 'white'],
// Toggle horizontal blocks above main widget
el : {
probes : false,
actions: false
},
block : {
// Display remote action block
actions : true,
// Display CPU / Memory
cpu : true,
mem : true,
// Issues count display
issues : true,
// Display meta block
meta : true,
// Display metadata about the probe (restart nb, interpreter...)
meta_block : true,
// Name of custom metrics to be displayed as a "major metrics"
main_probes : ['Processes']
},
},
}, function(err, conf) {
/**
* Main module entry
*/
console.log(conf);
// Do whatever you need
require('./business_logic.js')(conf);
});
更改配置值
在 Keymetrics 主仪表板中,模块将有一个名为“配置”的按钮。 单击该按钮后,您将能够访问或/和修改 package.json 上公开的所有配置变量!
想分享您的模块吗?
如果您构建了一个模块,请给我们发送电子邮件,我们将推广您的模块并将其添加到 Keymetrics 中:https://keymetrics.io/contact/
玩得开心!
为此页面做出贡献