實(shí)現(xiàn)守護(hù)進(jìn)程的幾種實(shí)現(xiàn)方式
文章如排版如果有問題請移步:CScript公眾號
假如你使用Python,Nodejs或是Golang等其他語言編寫一個(gè)web project,一旦準(zhǔn)備將其發(fā)布到Production環(huán)境,就需要考慮使用什么樣的方式是將這個(gè)web服務(wù)的進(jìn)程常駐在服務(wù)器之中。
? ? 這一步操作就是守護(hù)進(jìn)程,實(shí)現(xiàn)守護(hù)進(jìn)程的方式很多,一般編程語言都會(huì)內(nèi)置進(jìn)程管理相關(guān)的function。以nodejs為例:
parent.js:
child.js:
執(zhí)行 parent.js 創(chuàng)建子進(jìn)程,然后退出父進(jìn)程。這時(shí)就實(shí)現(xiàn)了子進(jìn)程的守護(hù)狀態(tài)。

? ? 在部署web應(yīng)用的時(shí)候我們一般不需要自己用代碼實(shí)現(xiàn)守護(hù)進(jìn)程的腳本,因?yàn)閷τ谶M(jìn)程狀態(tài)的管理還是略微有些繁瑣的,不同的語言實(shí)現(xiàn)的方式各自都不太一樣。這部分工作有不少工具可以cover, PM2(process manager 2)就是我經(jīng)常使用的工具之一,PM2使用js編寫的,一個(gè)進(jìn)程管理工具,它不僅可以守護(hù)進(jìn)程,還可以利用cpu的多核特做于負(fù)載均衡。它不僅可以運(yùn)行js文件還可以運(yùn)行其他語言腳本文件,sh文件,binary文件等,美中不足的是除了js文件之外,對于其他腳本功能支持有限。
通過pm2可以對應(yīng)用進(jìn)行監(jiān)控:

pm2監(jiān)控
另外一種方式介紹下Systemd(system deamom),systemd是linux的內(nèi)置應(yīng)用。我最近剛好使用Systemd為Golang編譯之后的binary文件編寫了配置了守護(hù)進(jìn)程的文件。
????使用systemd添加守護(hù)進(jìn)程服務(wù)首先要先在etc/systemd/system目錄下創(chuàng)建一個(gè)配置文件?app.service:
文件保存之后需要執(zhí)行:
然后可以通過類nginx 的systemd命令管理應(yīng)用的進(jìn)程:
這里本來應(yīng)該有示意圖,但是我的 vps剛剛被ban。
除了我提到的以上幾種方式之外還有不少其他解決方案。例如使用Python實(shí)現(xiàn)的Supervisor等等??傊褀eb服務(wù)部署到服務(wù)器就要對守護(hù)進(jìn)程有所了解。
更多關(guān)于CScrit頻道的信息: 請關(guān)注CScript