NSSM部署Windows服务

1 准备工作

  在Windows平台部署Asp.net core应用程序一般采用IIS,但是如果我们的net core应用执行的是定时任务,需要开机自启,稳定运行的话,使用NSSM将其部署为Winodows服务是一种不错的选择。NSSM官网地址:http://www.nssm.cc/。

我们知道netcore应用本质都是Console应用程序,所以这里我们就以一个控制台应用为例演示NSSM部署过程。新建一个控制台项目,项目名为HelloWorld,代码如下:

    class Program
{
static void Main(string[] args)
{
var tokenSource = new CancellationTokenSource();
//业务,异步执行,每隔1秒输出一次working
Task.Factory.StartNew(() =>
{
while (!tokenSource.IsCancellationRequested)
{
File.AppendAllTextAsync(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:working...{Environment.NewLine}");
Thread.Sleep();
}
}).ContinueWith(t =>
{
File.AppendAllText(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:成功退出!");
Environment.Exit();
}); //读取配置文件,如果配置文件stop为No,主线程休眠1秒
var configuration = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("setttings.json", optional: true, reloadOnChange: true)
.Build();
while ("No".Equals(configuration["stop"], StringComparison.CurrentCultureIgnoreCase))
{
Thread.Sleep();
} //让异步业务结束
tokenSource.Cancel();
}
}

  项目执行一个异步任务,每秒在F:/aaa.txt中写入一行 【time:working....】,运行程序后,打开F:/aaa.txt文件,内容如下:

2  NSSM部署

1.发布项目

  我们可以使用VS发布项目,也可以使用PowerShell执行以下命令进行发布,发布后的文件存放在D:/Apps/HelloWorld目录下

dotnet publish -o D:/Apps/HelloWorld -c release

2.使用NSSM

  下载NSSM,解压后,进入nssm.exe所在目录,在该目录下打开PowerShell。我们通过 nssm install <SerivceName> 命令创建服务,执行命令后后弹出服务安装窗口,如下图:

Application Path:dotnet所在目录,可以通过 where dotnet 命令查找;

Startup directroy:发布文件所在的目录;

Arguments:发布项目后的xxx.dll文件名。

  点击按钮就可以创建服务了,使用十分简单, 打开服务管理器,可以看到服务已经安装成功了:

  myHelloWorld服务安装成功后,并没有启动,我们可以使用服务管理器来启动、停止服务,当然我们也可以使用nssm来来控制服务的启动、停止、暂停等,常用命令如下:

nssm install <servicename>          //安装服务
nssm remove <servicename> //卸载服务
nssm start <servicename> //启动服务
nssm stop <servicename> //停止服务
nssm restart <servicename> //重启服务
nssm status <servicename> //查看服务
nssm pause <servicename> //暂停服务
nssm continue <servicename> //继续服务

  我们执行 nssm start myHelloWorld 命令来启动服务,查看F:/aaa.txt文件如下,可以看到服务运行正常。

3.服务修改

  项目总是不断迭代的, 如果我们的myHelloWorld程序后期进行了修改,代码如下,我们怎么去更新服务呢?

       static void Main(string[] args)
{
var tokenSource = new CancellationTokenSource();
//业务,异步执行,每隔1秒输出一次working
Task.Factory.StartNew(() =>
{
while (!tokenSource.IsCancellationRequested)
{
File.AppendAllTextAsync(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:【修改了代码】working...{Environment.NewLine}");
Thread.Sleep();
}
}).ContinueWith(t =>
{
File.AppendAllText(@"F:\aaa.txt", $"{DateTime.Now.ToString("f")}:成功退出!");
Environment.Exit();
}); //读取配置文件,如果配置文件stop为No,主线程休眠1秒
var configuration = new ConfigurationBuilder()
.SetBasePath(Environment.CurrentDirectory)
.AddJsonFile("setttings.json", optional: true, reloadOnChange: true)
.Build();
while ("No".Equals(configuration["stop"], StringComparison.CurrentCultureIgnoreCase))
{
Thread.Sleep();
} //让异步业务结束
tokenSource.Cancel();
}

  更新服务十分方便:首先使用  nssm stop myHelloWorld 暂停服务,然后用新的发布文件替代以前的发布文件,之后使用 nssm start myHelloWorld 启动服务即可。打开F:/aaa.txt,内容如下,可以看到重新发布已经生效了。

总结:虽然使用netcore后尽量应该把项目部署在Linux平台上,但是如果公司服务器是Windows Server,且项目要求开机自启、长期稳定运行,使用nssm简单方便地将项目部署为Windows服务也是一种不错的选择。

netcore项目在Windows部署:使用NSSM部署Windows服务的更多相关文章

  1. 部署NetCore项目(本文介绍用用IIS部署)

    首先要下载安装Core Runtim: 然后在IIS中的模块中就可以看到如下内容: 这时环境就搭好了: 下面按照正常的发布流程走就行了,关键看下面(一定要选择无托管代码)

  2. dotnet-warp && NSSM 部署 .net core 项目到 windows 服务

    如果你想将 .net core 项目以服务的形式部署到 windows 系统,希望本篇文章能够让你少走弯路 dotnet-warp 安装使用 dotnet-warp 是一个全局的.NET Core 工 ...

  3. 在Linux服务器部署 .NET-Core 项目

    一.文章概要  这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...

  4. netcore项目在Centos部署:nohup和supervisor方式

    Centos上部署netcore项目 1 准备工作 在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式. 首先我们写一个简单的 ...

  5. nssm 在windows上部署服务

    简介 NSSM是一款可将Nodejs项目注册为Windows系统服务的工具.当你的Node.js项目需要部署在Windows Server上时,NSSM是一个不错的选择. 特点 NSSM将Node.j ...

  6. NetCore项目的部署

    NetCore项目和以前的AspNet项目在部署上有很大的不同,因为NetCore是跨平台的 NetCore支持Kestrel和IIS两种方式,看代码的11行和14行 using System.IO; ...

  7. NSSM部署.Net Core到 Windows 服务

    NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...

  8. Windows程序的打包,部署(vs项目打包vs2013)---ShinePans

    Windows 应用程序在开发完毕之后,怎样将程序打包并制作成安装程序在客户机上部署 是每一个windows应用程序开发完毕之后都必须面对的问题. 学习目标:                    部 ...

  9. 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S

    使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish   等几个常用命令. 2.了解Dock ...

随机推荐

  1. Eclipse 新建jsp文件报错问题

    今天在web工程中新建一个index.jsp文件时,发现会报错,记录一下解决办法. 原因:缺少servlet-api.jar包 所以我们先去下载一个jar包,将它引入我们的工程中,即可. 工程右键-& ...

  2. 使用AndroidStudio编写APICloud模块需要注意的地方,解决模块未定义。

    在新的版本下,使用AndroidStudio编写APICloud模块,已经非常简单了,解决模块未定义,最重要的就是要先看官方的视频! 注意在模块的module.json中name很重要,建议做到三统一 ...

  3. 你不可不知的Java引用类型之——Reference源码解析

    定义 Reference是所有引用类型的父类,定义了引用的公共行为和操作. reference指代引用对象本身,referent指代reference引用的对象,下文介绍会以reference,ref ...

  4. CMMI 2.0术语变化

    过程域 vs. 实践域 “过程域”(Process Areas,PAs)在CMMI 2.0中变成了“实践域(Practice Areas,PAs)”.这样的改变,强调了CMMI 2.0是最佳实践的集合 ...

  5. PL/SQL连接数据库时报错12154

    研究了半天,最终我发现和环境变量没有半毛钱关系,就是tsnnames这个文件的格式错了.

  6. 应用shell脚本停启Tomcat

    最近在工作中频繁的操作多个tomcat,顺便就简单研究了一下 一. 简介 Shell 是一种与操作系统直接交互的程序,Unix系统中叫Bourne Shell,包括以下几种 Sh—Bourne She ...

  7. XE5 搭建DataSnap服务

    1   准备工作 1.1 环境准备 XE5或XE7,操作系统Windows7(64位)操作系统. 数据库MSSQL选择SQLServer2008. 如果数据库服务没有在开发电脑上,则需要在开发电脑上安 ...

  8. HTML 、XHTML、H5的区别:

    概括: HTML指的是HTML4.01:HTML是标记/设计语言.XHTML是HTML的过渡版:XHTML是可扩展的标记语言. H5是HTML的升级版.H5是一门编程语言. 区别: 1.XHTML标签 ...

  9. UNIX DOMAIN SOCKET效率

    关于UNIX DOMAIN SOCKET和普通udp socket的对比 在TX1(4核A57 1.7GHz)的板卡上进行测试,每个包大小设置为1024,全速收发,UDS的速度在90Mbps左右,UD ...

  10. Thermostat:双层存储结构的透明巨页内存管理机制

    这是一篇由密歇根大学的Neha Agarwal 和 Thomas F. Wenisch,发表在计算机系统顶会ASLOS的论文,Thermostat: Application-transparent P ...