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阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容