forever简单解读

400 阅读2分钟

forever的功能跟pm2差不多,除了在多核还有数据上报等方面较弱于pm2,都可以达到守护进程的效果。forever的具体使用就不在这里细说了,看cli的help就好了。 现在有几个问题解读下

  1. 如何让程序成为守护进程
  2. 如何与守护进程交互

如何让程序成为守护进程

守护进程就是在系统后台运行的程序,在forever里面,每当我们启动一个程序的时候,都会spawn启动一个子进程,然后让这个子进程脱离父进程,这样这个子进程就不会因为父进程的退出而导致退出。这样我们只是简单完成了一个守护进程,但是我们需要在这个守护进程里面完成更多的功能,从而达到守护我们nodejs程序的效果

首先,我们在这个子进程里面再启动一个子进程,用于运行我们期望运行的脚本,然后watch的脚本及其目录的变化,当我们的脚本出错时或者脚本、目录的改变,我们可以重新启动我们的脚本,从而让我们的程序不会掉线或者达到热更新代码的效果

如何与守护进程交互

前面我们说了,我们启动守护之后,我们就让他脱离父进程,所以我们无法通过ipc通道与子进程进行交互,同时,当我们用cli多次启动不同的应用,相当于我们有多个守护进程在运行,我们如何去管理这里守护进程,这些也是需要我们去注意的

在forever里面,有个机制,每次我们启动守护进程之后,我们会做两个步骤,第一,是将守护进程里面运行的子脚本(就是我们自己的脚本)的pid写入文件,第二,启动一个http服务器,用于socket通信

我们先讲讲第二点,这里启动http服务器,是监听socket文件,不但可以避免端口冲突,同时这个sokcet文件与pid相关,这样当我们需要跟守护进程进行通信时,我们可以通过索引、名字等等之类的找到我们需要通信的守护进程pid,然后connect到对应的socket文件,这样就可以跟守护进程进行通信了,然后就可以rm -rf / :)啦,just kidding,连上之后,我们就可以让守护进程重启、停止我们脚本的运行等等之类的骚操作了,同时守护进程也持有自身的process id ,这样我们也可以kill了守护进程。

结语

forever主要的点大概就这么多,就不去具体展开讲了,有兴趣的可以自己去看源码,如有鄙陋,欢迎指正。