PM2是Node的一个第三方库,也是一个优秀的进程管理软件。它具有资源监控、自动重启、集群等使用功能。Node服务实例通常使用PM2管理。
实际上PM2同样可以管理其他程序,如Python、Go等。
如果设置PM2的解释器为bash,就可以管理任意程序。
方案
这里以服务器Gunicorn为例。
pm2可以通过配置文件启动(pm2 start pm2-config.json
)。其中可以设置exec_interpreter
和script
、args
,配置这几个参数就可以启动大部分应用。
但是仍有例外。如Gunicorn的启动命令为gunicorn module:app
。其中module是Python文件名。由于启动命令中不存在文件路径,上述的script
就不能正常设置。
类似这种的应用,可以将其启动命令编写为bash脚本,利用bash启动。(windows下则为cmd和bat)
配置如下:
pm2-config.json:
{
"apps": [{
"exec_interpreter": "bash",
"script": "gunicorn-start.sh",
"args": []
}]
}
gunicorn-start.sh:
gunicorn app:app -b 0.0.0.0:10080 -w 16 -k gevent
缺陷
通过bash脚本启动的实例,pm2可以正常的记录日志和自动重启,但是性能监控会失效(内存恒定为脚本执行消耗)。
像gunicorn这样特殊的应用,自己会管理进程,所以不能使用pm2的cluster模式。