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

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

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