Linux下实现软件稳定后台运行以及开机自启解决方案-PM2

使用PM2保持应用稳定处于后台运行状态

背景

使用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加入到我们的系统中

1
2
$ 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)也完全没问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//固定格式

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的开机自启

很简单,命令如下:

1
2
3
$ pm2 startup

$ pm2 save

大功告成,接下去,需要后台运行以及开启自启的应用全部可以扔到app.js中运行,一劳永逸。

END