pm2亂燉

直接上干貨,對于入門pm2守護進程的同學來說或許有些許幫助,若有錯誤歡迎指正

關于pm2,基礎類的都不再多說了,守護進程的好處想必接觸過的人都深有體會,今天主要來總結下近幾天對于pm2一些學習型的研究

操作系統 mac

除了基本的通過配置文件啟動pm2以外,個人比較喜歡的是通過腳本來啟動,那么或許有人會問了,你通過一個配置文件去啟動,和你通過腳本導入配置項再啟動,究竟有什么差別?

配置文件啟動(請忽略下圖中的exports):


通過腳本(調用pm2提供的api)啟動

pm2 API文檔

? ? 沒錯,兩者就此功能來說,沒多大區別,但是通過api來啟動則會有更多的可拓展性,只要你敢想,只要你有需求,肯定會對pm2的這些可拓展性發出一些不可描述的驚嘆

? ? 首先,一個案例,倘若項目有功能需要進行計時器功能實現某個時刻執行某項任務,或者說按條件執行某項任務。

? ? 那么問題來了,單進程單機跑項目的時候沒多大毛病,但是一旦你開始集群了,最簡單的就是 ? pm2 start -i ? ?這種情況,想必應該都熟悉,會出現重復操作吧?

? ? 那么有同學肯定會說,如果是操作類似redis的,我可以通過加鎖來實現對數據的控制,操作文件的我可以通過文件鎖來進行控制,還可能會有人想到獨立出該模塊單獨跑一個進程,或者通過隊列去控制執行與否

? ? 沒錯,這些都是解決方案,在不說效率高低與資源浪費的前提下,這些都是不錯的選擇,然而,或許我們有更好的解決方案?

? ? 我們都知道,pm2的集群是基于cluster模塊的,自己嘗試著寫過cluster的應該都知道,我們可以通過master進程與work進程之間的通訊輕松控制任務的進行,而pm2作為守護進程,通過它啟動的項目都是跑在它開辟的進程下的,我們不能直接通過修改pm2的源碼去實現通過pm2來控制項目各進程的任務進行,沒關系,功能強大的pm2給我們提供了內置的api來讓我們可以通過這些api來實現站在pm2的視角上控制我們的app

? ? 我們常用的pm2命令,包括pm2 start/list/delete ? 等等,在pm2提供的api上都可以利用,相信熟悉pm2命令的小伙伴應該能很快上手,而今天主要介紹的就是pm2提供的進程通訊

通過API讓pm2對某個process發出信息

pm2.sendDataToProcessId(current_id, { ? ? ? ??

? ? ? ? type:'process:msg',

? ? ? ? data:{

? ? ? ? ? ? msg:'就決定是你了,pm2? ? id? 為'+current_id+'的work進程'

? ? ? ? },

? ? ? ? topic:"pm2 message"

? ?},function(err,res) {

? ? ?if(err==null) {

? ? ? ? ?console.log("success");

? ? ?}

});


//current_id為pm2下進程的id,可以通過pm2.list等方式獲取

在你的項目里寫上接受的代碼:

process.on('message',function(packet) { })

那么,在項目啟動后,發送的目標進程就可以順利接收到該信息,從而可以拓展開進行你的業務邏輯,同樣的,pm2下的進程也可以發送信息到守護進程,而pm2也提供了相關api去接收

pm2.launchBus(function(err,pm2_bus) {

? ? ? ?pm2_bus.on('process:msg',function(packet) {

? ? ? ? ? ? console.log(packet);

? ? ? ?});

});

←_←話不多說趕快上車





接下來要介紹的是另外一個pm2提供的讓人很舒服的功能pm2-module-system

這玩意是拿來干嘛的呢,簡單來說,如果把pm2比作一款游戲,那么它就是這款游戲的插件,你可以主動提供自己的功能,在pm2上拓展開來,官網上就有示例,也是我接下去要講的module

pm2-logrotate

pm2的日志分割模塊,很實用的一個模塊,通過拓展pm2的log可以很方便的管理項目的log,忍不住去上手嘗試了下,然而發現了點讓人很不舒服的地方。

pm2-logrotate源碼片段

可以看到pm2-logrotate對日志的切割是采用pm2進程下的app來進行操作的

但是這樣忽略了集群下的情況,導致一開始我在用的時候出現了多次刪除舊日志的錯誤拋出

雖然沒什么大礙,但是總影響體驗,并且會造成不必要的錯誤日志生成(logrotate的日志)

所以自己做了下小改動,采取pm2環境變量中app輸出日志的路徑來進行操作(之所以不采用直接過濾app name是因為pm2的log可以按進程輸出)這樣就可以確保不進行多余的操作

修改后的源碼就不貼了,這么簡單的小改動就不拿來獻丑了_(:зゝ∠)_

感興趣的同學也可以自己利用pmx和pm2module編寫一些實用的外掛造福大眾

pmx

pm2 module總體來說就是通過pmx.initModule加載你自己的module到pm2下,當然每個module都可以自己寫入自己需要的配置項來進行業務邏輯的處理

最后還有個小彩蛋


就不寫圖片名

pm2 monit界面的這玩意應該很多人都看到過,它同樣是提供了對外接口來讓我們可以在項目架設起來后進行一些直觀的可視化操作

同樣是通過pmx

pm2-logrotate源碼片段

pm2-logrotate源碼片段
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,740評論 3 420
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,931評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,321評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,533評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,082評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,891評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,319評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,794評論 3 394
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,076評論 2 375

推薦閱讀更多精彩內容