简介:
PM2 是一个带有负载均衡功能的 Node 应用的进程管理器。
当你要把你的独立代码利用全部的服务器上的所有 CPU,并保证进程永远都活着,0 秒的重载, PM2 是完美的。它非常适合 IaaS 结构,但不要把它用于 PaaS 方案(随后将开发 Paas 的解决方案)。
github:
https://github.com/Unitech/pm2
常用操作:
# 安装 pm2
$ npm install -g pm2
# 启动pm2
$ pm2 start pm2.json
# pm2 list 查看列表:
$ pm2 list
┌──────────┬────┬─────────┬──────┬────────┬─────────┬────────┬─────────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ memory │ watching │
├──────────┼────┼─────────┼──────┼────────┼─────────┼────────┼─────────────┼──────────┤
│ pdi │ 1 │ cluster │ 8626 │ online │ 0 │ 2h │ 36.113 MB │ disabled │
│ cicnoc │ 2 │ cluster │ 8781 │ online │ 0 │ 2h │ 33.078 MB │ disabled │
│ bi │ 3 │ cluster │ 8876 │ online │ 0 │ 119m │ 35.137 MB │ disabled │
└──────────┴────┴─────────┴──────┴────────┴─────────┴────────┴─────────────┴──────────┘
Use `pm2 show ` to get more details about an app
# 删除一个应用:
$ pm2 delete pdi
# 停掉一个应用:
$ pm2 stop pdi
$ pm2 --help
Usage: pm2 [cmd] app
Commands:
start [options] start and daemonize an app
deploy deploy your json
startOrRestart start or restart JSON file
startOrReload start or gracefully reload JSON file
startOrGracefulReload start or gracefully reload JSON file
stop [options] stop a process (to start it again, do pm2 restart )
restart [options] restart a process
scale scale up/down a process in cluster mode depending on total_number param
reload reload processes (note that its for app using HTTP/HTTPS)
gracefulReload gracefully reload a process. Send a "shutdown" message to close all connections.
id get process id by name
delete stop and delete a process from pm2 process list
sendSignal send a system signal to the target process
ping ping pm2 daemon - if not up it will launch it
updatePM2 update in-memory PM2 with local PM2
update (alias) update in-memory PM2 with local PM2
install|module:install install or update a module and run it forever
module:update update a module and run it forever
module:generate [app_name] Generate a sample module in current folder
uninstall|module:uninstall stop and uninstall a module
publish|module:publish Publish the module you are currently on
set sets the specified config
multiset multiset eg "key1 val1 key2 val2
get [key] get value for
conf [key] [value] get / set module config values
config [value] get / set module config values
unset clears the specified config
interact [options] [secret_key|command] [public_key] [machine_name] linking action to keymetrics.io - command can be stop|info|delete|restart
link [options] [secret_key|command] [public_key] [machine_name] linking action to keymetrics.io - command can be stop|info|delete|restart
web launch a health API on port 9615
dump dump all processes for resurrecting them later
save (alias) dump all processes for resurrecting them later
resurrect resurrect previously dumped processes
startup [platform] auto resurrect process at startup. [platform] = ubuntu, centos, redhat, gentoo, systemd, darwin, amazon
logrotate copy default logrotate configuration
generate generate an ecosystem.json configuration file
ecosystem generate an ecosystem.json configuration file
reset reset counters for process
describe describe all parameters of a process id
desc (alias) describe all parameters of a process id
info (alias) describe all parameters of a process id
show (alias) describe all parameters of a process id
list list all processes
ls (alias) list all processes
l (alias) list all processes
status (alias) list all processes
jlist list all processes in JSON format
prettylist print json in a prettified JSON
monit launch termcaps monitoring
m (alias) launch termcaps monitoring
flush flush logs
reloadLogs reload all logs
logs [options] [id|name] stream logs file. Default stream all logs
kill kill daemon
pull [commit_id] updates repository for a given app
forward updates repository to the next commit for a given app
backward downgrades repository to the previous commit for a given app
gc force PM2 to trigger garbage collection
deepUpdate performs a deep update of PM2
*
Options:
-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 set a for script
-i --instances launch [number] instances (for networked app)(load balanced)
-l --log [path] specify entire log file (error and out are both included)
-o --output specify out log file
-e --error specify error log file
-p --pid specify pid file
-k --kill-timeout delay before sending final SIGKILL signal to process
--max-memory-restart specify max memory amount used to autorestart (in megaoctets)
--restart-delay specify a delay between restarts (in milliseconds)
--env specify environment to get specific env variables (for JSON declaration)
-x --execute-command execute a program using fork system
-u --user define user when generating startup script
--hp define home path when generating startup script
-c --cron restart a running process based on a cron pattern
-w --write write configuration in local folder
--interpreter the interpreter pm2 should use for executing app (bash, python...)
--interpreter-args interpret options (alias of --node-args)
--log-date-format add custom prefix timestamp to logs
--no-daemon run pm2 daemon in the foreground if it doesn't exist already
--skip-env do not refresh environmnent on restart/reload
--source-map-support force source map support
--only with json declaration, allow to only act on one application
--disable-source-map-support force source map support
--merge-logs merge logs from different instances but keep error and out separated
--watch [paths] watch application folder for changes
--ignore-watch folder/files to be ignored watching, chould be a specific name or regex - e.g. --ignore-watch="test node_modules "some scripts""
--node-args space delimited arguments to pass to node in cluster mode - e.g. --node-args="--debug=7001 --trace-deprecation"
--no-color skip colors
--no-vizion start an app without vizion feature (versioning control)
--no-autorestart start an app without automatic restart
--no-treekill Only kill the main process, not detached children
--no-pmx start an app without pmx
--no-automation start an app without pmx
Basic Examples:
Start an app using all CPUs available + set a name :
$ pm2 start app.js -i 0 --name "api"
Restart the previous app launched, by name :
$ pm2 restart api
Stop the app :
$ pm2 stop api
Restart the app that is stopped :
$ pm2 restart api
Remove the app from the process list :
$ pm2 delete api
Kill daemon pm2 :
$ pm2 kill
Update pm2 :
$ npm install pm2@latest -g ; pm2 update
More examples in https://github.com/Unitech/pm2#usagefeatures
Deployment help:
$ pm2 deploy help
扩展阅读:
PM2 使用介绍
https://segmentfault.com/a/1190000002539204