linux下部署程序,经常需要守护进程

比如:

  • node.js应用,
node app.js
  • python应用
python main.py
  • .Net Core应用
dotnet webapi.dll

我们就需要守护服务为我们守护应用程序:

  • 错误时,自动处理
  • 自动重启

类似的Linux守护进程工具有:

  • PM2
  • Supervisor

Windows系统大多数时候并不需要这样的工具,大多数都是有GUI的工具,如IIS,操作也更简单。但是有时候,就没办法了,比如nodepython等一些脚本的部署,以及.net core在一些低版本服务器上,还需要额外的安装IIS模块才能部署dotnet core应用。

NSSM - the Non-Sucking Service Manager

不会嗝屁的服务管理器

1.安装

这里使用的chocolatey安装,如果你还没有安装请参考【Tool】Windows软件包管理器——chocolatey

choco install nssm

image-20210307000408518

2.使用

2.1 执行命令

nssm install

便会弹出NSSM service installer

image-20210307000553999

2.2 安装服务

image-20210307000745929

  • Application Path:exe全路径
    • C:\tools\nginx-1.17.8\nginx.exe
    • C:\Program Files\dotnet\dotnet.exe
    • C:\Program Files\nodejs\node.exe
  • Startup directory:
    • 如果.net core,就是dll的路径
    • 如果是其他脚本python脚本,或者node.js,则是启动的脚本文件路径
    • 如果是exe,则是exe的路径
  • Arguments:参数
    • 如果是exe,可能没有参数
    • 如果是.net core,就是发布后的dll
    • 如果是python或node.js,就是main.py或者index.js
  • Service name:windows下由nssm守护进程,本质就是把exe打包成服务,然后由nssm管理服务:监控程序运行状态,程序异常中断后自动启动,实现守护进程的功能。
  • Install Service:安装服务

2.3 启动/停止/重启 服务

服务已经安装好了,还需要我们去启动

服务管理主要有启动、停止和重启,其命令如下:

  • 启动服务: nssm start
  • 停止服务: nssm stop
  • 重启服务: nssm restart
  • 暂停/继续服务 nssm pause <servicename> nssm continue <servicename>
  • 查看服务状态:nssm status <servicename>

当然,也可以使用系统自带的服务管理器操作和使用系统的命令。

2.3 卸载服务

服务删除可以使用如下命令之一:

nssm remove <servicename>
nssm remove <servicename> confirm

功能没有大的区别,后面的命令是自动确认的,没有交互界面。

3.效果

nssm守护nginx

image-20210307001425439

image-20210307001510478

nssm守护node

我用koa写了一个简单的web服务

const Koa = require('koa');
const Router = require('koa-router')
const app = new Koa();
var router = new Router();


router.get('/', async (ctx, res) => {
    ctx.body = '首页';
    //get
    // ctx.query  //对象
ctx.request.query
}).get('/news', async (ctx, res) => {
    ctx.body = '新闻页面';
}).get('/newscontent/:aid/:cid',async(ctx)=>{
    // ctx.params
});

app.use(router.routes())    /**启动路由 */
    .use(router.allowedMethods());

app.listen(3000);
console.log("listening 3000...");

使用nssm进行部署:

image-20210307144525478

image-20210307144613072

image-20210307144643416

访问测试

image-20210307145010484

同样的测试可以用在python或者golang上,博主就不再做重复示例,留给朋友们去探索吧。

4.结论

通过nssm,我们就能在windows的环境下运行并守护任何我们使用python、node、dotnet、go等不同语言编写的程序,为windows环境下提供部署解决方案。