文章如排版如果有问题请移步:CScript公众号

假如你使用Python,Nodejs或是Golang等其他语言编写一个web project,一旦准备将其发布到Production环境,就需要考虑使用什么样的方式是将这个web服务的进程常驻在服务器之中。

    这一步操作就是守护进程,实现守护进程的方式很多,一般编程语言都会内置进程管理相关的function。以nodejs为例:

parent.js:


child.js:

执行 parent.js 创建子进程,然后退出父进程。这时就实现了子进程的守护状态。

运行中的node子进程

    在部署web应用的时候我们一般不需要自己用代码实现守护进程的脚本,因为对于进程状态的管理还是略微有些繁琐的,不同的语言实现的方式各自都不太一样。这部分工作有不少工具可以cover, PM2(process manager 2)就是我经常使用的工具之一,PM2使用js编写的,一个进程管理工具,它不仅可以守护进程,还可以利用cpu的多核特做于负载均衡。它不仅可以运行js文件还可以运行其他语言脚本文件,sh文件,binary文件等,美中不足的是除了js文件之外,对于其他脚本功能支持有限。

通过pm2可以对应用进行监控:


pm2监控


另外一种方式介绍下Systemd(system deamom),systemd是linux的内置应用。我最近刚好使用Systemd为Golang编译之后的binary文件编写了配置了守护进程的文件。

    使用systemd添加守护进程服务首先要先在etc/systemd/system目录下创建一个配置文件 app.service:

文件保存之后需要执行:

然后可以通过类nginx 的systemd命令管理应用的进程:

这里本来应该有示意图,但是我的 vps刚刚被ban。

除了我提到的以上几种方式之外还有不少其他解决方案。例如使用Python实现的Supervisor等等。总之把web服务部署到服务器就要对守护进程有所了解。

更多关于CScrit频道的信息: 请关注CScript