今天介紹一個(gè)生產(chǎn)級(jí)的流程管理工具 PM2盗飒,通常我們說(shuō)到 PM2 的時(shí)候,都是在說(shuō)如何部署 Node.js 程序陋桂,但是實(shí)際上 PM2 很強(qiáng)大逆趣,不僅僅可以用來(lái)管理 Node.js,它還可以用來(lái)管理 Python嗜历、PHP宣渗、Ruby、perl 等等梨州。
這里就以 Python 舉例子落包,來(lái)看看 PM2 如何部署管理 Python 腳本。
PM2-Python
PM2 是一個(gè)生產(chǎn)級(jí)流程管理器摊唇,可以輕松管理后臺(tái)進(jìn)程咐蝇,在 Python 的世界中,PM2 是可以和 Supervisord 相媲美的巷查,并且 PM2 還有一些非常棒的功能有序。
使用 PM2,讓崩潰重啟岛请、觀察旭寿、檢查日志甚至部署應(yīng)用程序,都變的簡(jiǎn)單崇败,并且 PM2 非常重視在命令行界面的操作體驗(yàn)盅称,因此 PM2 非常易于使用和掌握。
PM2 發(fā)展到今天疾层,已經(jīng) 5 年了,在 Github 上有超過(guò) 6500w 次下載贡避,已經(jīng)成為在生產(chǎn)服務(wù)器中運(yùn)行 Node.js 的首選方式之一痛黎。但是它也支持 Python。
安裝 PM2
PM2 依賴(lài)于 Node.js刮吧,所以需要提前安裝 Node湖饱,這一步非常簡(jiǎn)單:
其他平臺(tái)如何安裝 Node.js,可自行查找教程旗笔。
有了 Node 的環(huán)境后彪置,就可以通過(guò) npm 來(lái)安裝 PM2 了。
$ sudo npm install pm2 -g
要初始化 PM2 蝇恶,可以使用 pm2 ls 命令夹姥,此時(shí)就可以看到一個(gè)很友好的界面蝙叛。
現(xiàn)在授舟,已經(jīng)成功安裝好 PM2 了,讓我們啟動(dòng)一個(gè) Python 應(yīng)用吧贸辈。
啟動(dòng) Python
使用 PM2 啟動(dòng)應(yīng)用非常的簡(jiǎn)單释树,它講根據(jù)腳本擴(kuò)展自動(dòng)匹配解釋器,用以運(yùn)行指定的應(yīng)用程序擎淤。
我們先創(chuàng)建一個(gè)簡(jiǎn)單的 Python 應(yīng)用程序奢啥,例如:hello.py。
我們有了一個(gè)簡(jiǎn)單的 Python 腳本赌结,接下來(lái)我們就用 PM2 去啟動(dòng)它。
$ pm2 start hello.py
然后在 Terminal 里就可以看到該進(jìn)程了孝冒。
到這一步,這個(gè) Python 程序就將永遠(yuǎn)的運(yùn)行下去啼染,這意味著如果該進(jìn)程退出或者拋出異常,它將被自動(dòng)重啟焕梅。
此處的 mode 為 fork迹鹅,也就是關(guān)閉當(dāng)前的 Terminal 窗口,它依然可以檢查到此應(yīng)用的狀態(tài)贞言。
想要查看 PM2 運(yùn)行管理的應(yīng)用程序斜棚,可以使用 pm2 ls 命令進(jìn)行查看。
檢查日志
通過(guò) PM2 運(yùn)行的程序,如果想要查看 Log弟蚀,可以輸入 pm2 logs 命令蚤霞。
如果想要指定查看某個(gè)進(jìn)程的 Log捶闸,可以使用 pm2 logs <app_name> 進(jìn)行指定夜畴。
另外 PM2 還提供了自動(dòng)化的日志輪換功能,但是需要安裝 pm2-logrotate
$ pm2 install pm2-logrotate
pm2-logrotate 將提供每天日志輪換更新的功能删壮,并保持總的日志控件大小為 10M贪绘。
查看某進(jìn)程的信息
想要查看當(dāng)前使用 PM2 啟動(dòng)的程序的詳細(xì)信息,可以使用 pm describe <app_name> 命令進(jìn)行查看央碟。
在輸出中,可以看到日志文件的路徑经柴,已經(jīng)解釋器等信息狸窘。
管理 PM2 的進(jìn)程狀態(tài)
介紹完啟動(dòng)和查看日志,再看幾個(gè)簡(jiǎn)單的管理命令坯认。
1. 停止某個(gè)程序
$ pm2 stop hello
2. 重啟某個(gè)程序
$ pm2 restart hello
3. 從進(jìn)程列表中停止和刪除某個(gè)程序
$ pm2 delete hello
服務(wù)器重啟時(shí)翻擒,依然保持運(yùn)行
使用 PM2 啟動(dòng) Python 程序之后,PM2 只能保證啟動(dòng)的這個(gè) Python 程序發(fā)生意外崩潰的時(shí)候牛哺,對(duì)他進(jìn)行重啟陋气。如果你希望在重啟服務(wù)器的時(shí)候,依然保持應(yīng)用程序在線引润,則需要設(shè)置 init 腳本巩趁,用以告訴系統(tǒng)啟動(dòng) PM2 以及你的應(yīng)用程序。
想讓 PM2 跟隨系統(tǒng)啟動(dòng)淳附,只需要運(yùn)行此命令议慰。
$ pm2 startup
startup 可以生成一個(gè)設(shè)置環(huán)境變量的命令。
復(fù)制/粘貼此命令的最后一行炉菲,執(zhí)行后將在系統(tǒng)重啟時(shí)堕战,自動(dòng)啟動(dòng) PM2。
現(xiàn)在已經(jīng)可以重啟 PM2 了拍霜,還需要告訴 PM2 那些進(jìn)程狀態(tài)需要在重啟時(shí)保持不變嘱丢,只需要輸入命令:
$ pm2 save
這將創(chuàng)建一個(gè)轉(zhuǎn)存文件,記錄當(dāng)前由 PM2 管理的進(jìn)程狀態(tài)祠饺,PM2 將在重啟時(shí)越驻,按照之前的狀態(tài)恢復(fù)他們。
監(jiān)聽(tīng) CPU/內(nèi)存信息
要監(jiān)聽(tīng) CPU/內(nèi)存并檢查有關(guān)進(jìn)程的一些信息诵棵,需要使用 pm2 monit 命令。
這將打開(kāi)一個(gè) termcaps 界面祝旷,允許試試了解正在運(yùn)行的應(yīng)用程序履澳。
你還可以使用 pm2 show <app_name> 獲取有關(guān)應(yīng)用程序的所有可能信息吻谋。
使用 Ecosystem 文件
如果有多個(gè)程序需要啟動(dòng)忠蝗,或者在啟動(dòng)的時(shí)候需要傳遞不同的參數(shù)、選項(xiàng)等漓拾,可以使用 eocsystem 文件對(duì)應(yīng)用程序進(jìn)行配置阁最。
Eocsystem 需要通過(guò) ecosystem.config.js 文件進(jìn)行配置,此文件可以通過(guò) pm2 init 命令生成骇两。生成好后速种,我們可以在其中配置一些配置信息。
在這個(gè)例子中棋傍,我們聲明了兩個(gè)應(yīng)用程序,通過(guò) interpreter 配置程序啟動(dòng)的解釋器难审,一個(gè)使用 Python2 (默認(rèn))運(yùn)行舍沙,另一個(gè)使用 Python3 運(yùn)行。
啟動(dòng)它剔宪,依然使用 pm2 start 命令。
$ pm2 start ecosystem.config.js
想要單獨(dú)重啟 “production” (env_production):
$ pm2 restart ecosystem.config.js --env production
Ecosystem.config.js 文件中,很多配置都是可以通過(guò)命令來(lái)指定葱绒,例如感帅,可以通過(guò) --interpreter 來(lái)指定解析程序。
通常我們會(huì)同時(shí)安裝 Python2.x 和 Python3.x 的環(huán)境地淀,而 PM2 在默認(rèn)情況下失球,是通過(guò)腳本文件后綴來(lái)判斷的,如果沒(méi)有后綴就需要強(qiáng)制指定 --interpreter帮毁。
這些配置信息也標(biāo)記了 PM2 支持的腳本程序。
那么如果需要使用 Python3.x 來(lái)執(zhí)行某個(gè)腳本爷肝,就需要 --interpreter 了猾浦。
$ pm2 start hello.py --interpreter=python3
小結(jié)
PM2 的簡(jiǎn)單使用,就先介紹到這里灯抛。雖然這里使用 Python 來(lái)舉例金赦,但是本文所有相關(guān)命令,是可以適用其他 PM2 支持的腳本程序对嚼。
PM2 還有很多強(qiáng)大的功能夹抗,比如說(shuō)利用 SSH 輕松部署到服務(wù)器、負(fù)載均衡等等都是一些不錯(cuò)的功能纵竖,有興趣可以查閱文檔漠烧。PM2 文檔很健全磨确,大部分問(wèn)題都可以在文檔中找到答案沽甥。
有任何問(wèn)題,歡迎在留言區(qū)討論乏奥,有用就分享吧摆舟,謝謝!