背景
使用Linux系统我们常会遇到需要软件在后台运行,并且开机自启的情况。要实现后台运行以及开启自启有许多种解决方案,比如screen,&即可实现后台运行,将服务加入rc.local中可以实现开机自启。但经过研究,我推荐一种Linux下绝佳的后台运行以及开机自启的解决方案,优点是极其稳定,并且使用方便。缺点我暂时想不到2333
开始
PM2介绍
官方简介
PM2 is a daemon process manager that will help you manage and keep your application online. Getting started with PM2 is straightforward, it is offered as a simple and intuitive CLI, installable via NPM.
我写的简介
PM2是一款基于node开发的软件,用于实现对进程的守护,也就是当用户断开连接时,我们的进程/服务能够继续保持稳定地后台运行,并且通过一个指令即可实现开机自启。
Node.js&npm的安装
由于PM2是基于node开发的软件,所以我们必须先搭建node
这里以Ubuntu发行版为例:
将PPA加入到我们的系统中
$ sudo apt-get install curl
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
然后直接运行apt安装
$ sudo apt-get install nodejs
验证是否安装成功
$ node -v
v12.10.0
$ npm -v
6.10.3
若执行命令后返回以上信息即安装成功
PM2的安装
在安装完NPM环境后我们开始安装pm2。PM2的安装非常简单,只需要一句话即可完成。
npm install pm2@latest -g
等待安装完成后我们即可进行pm2的相关配置了
PM2的配置
我们需要新建一个文件用于启动服务,然后将这个文件添加如PM2,让PM2守护它,从而间接达到让我们的服务稳定后台运行的目的。
在你喜欢的目录下新建一个app.js文件,然后我们开始写。
这里以我上一篇文章为例,我们将内网穿透的frp软件加入到js文件中,然后让pm2守护它。
这边我们是以js为例,使用其他脚本(如:.sh , .out, .py, .class)也完全没问题。
//固定格式
var cp=require("child_process");
//下面这句话需要修改哦
cp.spawn("/home/frp/frps",["-c","/home/frp/frps.ini"]).stdout.pipe(process.stdout);
/*
解释: 小括号里面直接写上软件安装的路径即可,中括号里面填入我们需要的参数(注意:不需要空格)。只需要修改这两个地方即可,其他地方直接复制粘贴。
这句代码等价于如下Linux指令:
$ ./home/frp/frps -c /home/frp/frps.ini
*/
这里提醒一下: 在pm2中路径一定要使用绝对路径,否则会造成代码中的路径与你运行指令的路径有关,导致"No such file or dictionary"。
配置完成后,我们即可运行我们的守护进程。
直接输入:
$ pm2 start app.js
app.js是我们刚刚新建的文件。
到此,我们的应用已经能够实现稳定地后台运行。接下来,我们要实现应用的开机自启。
PM2的开机自启
很简单,命令如下:
$ pm2 startup
$ pm2 save
大功告成,接下去,需要后台运行以及开启自启的应用全部可以扔到app.js中运行,一劳永逸。
END