内容简介:今天介绍一个生产级的流程管理工具 PM2,通常我们说到 PM2 的时候,都是在说如何部署 Node.js 程序,但是实际上 PM2 很强大,不仅仅可以用来管理 Node.js,它还可以用来管理 Python、PHP、Ruby、perl 等等。这里就以 Python 举例子,来看看 PM2 如何部署管理 Python 脚本。PM2 是一个生产级流程管理器,可以轻松管理后台进程,在 Python 的世界中,PM2 是可以和 Supervisord 相媲美的,并且 PM2 还有一些非常棒的功能。
今天介绍一个生产级的流程管理工具 PM2,通常我们说到 PM2 的时候,都是在说如何部署 Node.js 程序,但是实际上 PM2 很强大,不仅仅可以用来管理 Node.js,它还可以用来管理 Python、 PHP 、 Ruby 、 perl 等等。
这里就以 Python 举例子,来看看 PM2 如何部署管理 Python 脚本。
PM2-Python
PM2 是一个生产级流程管理器,可以轻松管理后台进程,在 Python 的世界中,PM2 是可以和 Supervisord 相媲美的,并且 PM2 还有一些非常棒的功能。
使用 PM2,让崩溃重启、观察、检查日志甚至部署应用程序,都变的简单,并且 PM2 非常重视在命令行界面的操作体验,因此 PM2 非常易于使用和掌握。
PM2 发展到今天,已经 5 年了,在 Github 上有超过 6500w 次下载,已经成为在生产服务器中运行 Node.js 的首选方式之一。但是它也支持 Python。
安装 PM2
PM2 依赖于 Node.js,所以需要提前安装 Node,这一步非常简单:
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt-get install -y nodejs
其他平台如何安装 Node.js,可自行查找教程。
有了 Node 的环境后,就可以通过 npm 来安装 PM2 了。
$ sudo npm install pm2 -g
要初始化 PM2 ,可以使用 pm2 ls
命令,此时就可以看到一个很友好的界面。
现在,已经成功安装好 PM2 了,让我们启动一个 Python 应用吧。
启动 Python
使用 PM2 启动应用非常的简单,它讲根据脚本扩展自动匹配解释器,用以运行指定的应用程序。
我们先创建一个简单的 Python 应用程序,例如:hello.py。
#!/usr/bin/python import time while 1: print("Start: %s" % time.ctime()) time.sleep(1)
我们有了一个简单的 Python 脚本,接下来我们就用 PM2 去启动它。
$ pm2 start hello.py
然后在 Terminal 里就可以看到该进程了。
到这一步,这个 Python 程序就将永远的运行下去,这意味着如果该进程退出或者抛出异常,它将被自动重启。
此处的 mode 为 fork,也就是关闭当前的 Terminal 窗口,它依然可以检查到此应用的状态。
想要查看 PM2 运行管理的应用程序,可以使用 pm2 ls
命令进行查看。
检查日志
通过 PM2 运行的程序,如果想要查看 Log,可以输入 pm2 logs
命令。
如果想要指定查看某个进程的 Log,可以使用 pm2 logs <app_name>
进行指定。
另外 PM2 还提供了自动化的日志轮换功能,但是需要安装 pm2-logrotate
$ pm2 install pm2-logrotate
pm2-logrotate
将提供每天日志轮换更新的功能,并保持总的日志控件大小为 10M。
查看某进程的信息
想要查看当前使用 PM2 启动的程序的详细信息,可以使用 pm describe <app_name>
命令进行查看。
在输出中,可以看到日志文件的路径,已经解释器等信息。
管理 PM2 的进程状态
介绍完启动和查看日志,再看几个简单的管理命令。
1. 停止某个程序
$ pm2 stop hello
2. 重启某个程序
$ pm2 restart hello
3. 从进程列表中停止和删除某个程序
$ pm2 delete hello
更多的命令,可以直接查看官方文档。
服务器重启时,依然保持运行
使用 PM2 启动 Python 程序之后,PM2 只能保证启动的这个 Python 程序发生意外崩溃的时候,对他进行重启。如果你希望在重启服务器的时候,依然保持应用程序在线,则需要设置 init 脚本,用以告诉系统启动 PM2 以及你的应用程序。
想让 PM2 跟随系统启动,只需要运行此命令。
$ pm2 startup
startup
可以生成一个设置环境变量的命令。
复制/粘贴此命令的最后一行,执行后将在系统重启时,自动启动 PM2。
现在已经可以重启 PM2 了,还需要告诉 PM2 那些进程状态需要在重启时保持不变,只需要输入命令:
$ pm2 save
这将创建一个转存文件,记录当前由 PM2 管理的进程状态,PM2 将在重启时,按照之前的状态恢复他们。
监听 CPU/内存信息
要监听 CPU/内存并检查有关进程的一些信息,需要使用 pm2 monit
命令。
这将打开一个 termcaps 界面,允许试试了解正在运行的应用程序。
你还可以使用 pm2 show <app_name>
获取有关应用程序的所有可能信息。
使用 Ecosystem 文件
如果有多个程序需要启动,或者在启动的时候需要传递不同的参数、选项等,可以使用 eocsystem 文件对应用程序进行配置。
Eocsystem 需要通过 ecosystem.config.js 文件进行配置,此文件可以通过 pm2 init
命令生成。生成好后,我们可以在其中配置一些配置信息。
module.exports = { apps : [{ name: 'echo-python', cmd: 'hello.py', args: 'arg1 arg2', autorestart: false, watch: true, pid: '/path/to/pid/file.pid', instances: 4, max_memory_restart: '1G', env: { ENV: 'development' }, env_production : { ENV: 'production' } }, { name: 'echo-python-3', cmd: 'hello.py', interpreter: 'python3' }] };
在这个例子中,我们声明了两个应用程序,通过 interpreter
配置程序启动的解释器,一个使用 Python2 (默认)运行,另一个使用 Python3 运行。
启动它,依然使用 pm2 start
命令。
$ pm2 start ecosystem.config.js
想要单独重启 “production” (env_production):
$ pm2 restart ecosystem.config.js --env production
Ecosystem.config.js
文件中,很多配置都是可以通过命令来指定,例如,可以通过 --interpreter
来指定解析程序。
通常我们会同时安装 Python2.x 和 Python3.x 的环境,而 PM2 在默认情况下,是通过脚本文件后缀来判断的,如果没有后缀就需要强制指定 --interpreter
。
{ ".sh": "bash", ".py": "python", ".rb": "ruby", ".coffee" : "coffee", ".php": "php", ".pl" : "perl", ".js" : "node" }
这些配置信息也标记了 PM2 支持的脚本程序。
那么如果需要使用 Python3.x 来执行某个脚本,就需要 --interpreter
了。
$ pm2 start hello.py --interpreter=python3
小结
PM2 的简单使用,就先介绍到这里。虽然这里使用 Python 来举例,但是本文所有相关命令,是可以适用其他 PM2 支持的脚本程序。
PM2 还有很多强大的功能,比如说利用 SSH 轻松部署到服务器、负载均衡等等都是一些不错的功能,有兴趣可以查阅文档。PM2 文档很健全,大部分问题都可以在文档中找到答案。
有任何问题,欢迎在留言区讨论,有用就分享吧,谢谢!
参考:
https://blog.pm2.io/managing-python-application-with-pm2
https://pm2.io/doc/en/runtime/quick-start/
「 联机圆桌 」:point_left:推荐我的知识星球,一年 50 个优质问题,上桌联机学习。
公众号后台回复成长『 成长 』,将会得到我准备的学习资料,也能回复『 加群 』,一起学习进步;你还能回复『 提问 』,向我发起提问。
推荐阅读:
图解 Chrome,架构篇 | 利用预处理脚本,管理小程序代码 | 分词,科普及解决方案 |图解:HTTP 范围请求 |小程序学习资料 |HTTP 内容编码 |辅助模式实战 |辅助模式玩出花样 |小程序 Flex 布局
听说喜欢 留言和分享 的人,会有好运来哦
点击『 阅读原文 』查看更多精彩内容
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Docker 脚本化一键部署
- Shell脚本结合Git实现增量项目部署
- 后台管理系统 icec v1.1 发布,完善打包部署脚本
- 自动化运维Ansible批量部署服务+shell脚本批量推送公钥
- goproxy 服务端一键部署脚本 goproxy-shell 0.2.1 发布
- 单台主机一键编译部署LAMP+wordpress+discuz系统的shell脚本
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。