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. ButterKnife 牛油刀使用

    一.butterknife介绍 ①官网 butterknife ②Field and method binding for Android Views which uses annotation pr ...

  2. java笔记----获取项目resource中class下的路径

    String path =类名.class.getClassLoader().getResource("./包/文件名").getPath(); 相对路径推荐使用这个 类名.cla ...

  3. CRC32明文攻击

    明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时, 因为同一个zip压缩包里的所有文件都是使用同一个加密密钥来加密 ...

  4. 在Windows上安装配置MongoDB

    MongoDB下载 下载地址: https://www.mongodb.org/ 找到下载页面,选择对应的平台和版本,选择Package类型msi 安装 按默认或选择安装位置一步步到头 配置环境变量 ...

  5. EF Core使用笔记(基于MySql数据库)

    一.什么是EF Entity Framework 是适用于.NET 的对象关系映射程序 (O/RM). 二.比较 EF Core 和 EF6 1.Entity Framework 6 Entity F ...

  6. CSAPP:第十二章 并发编程

    CSAPP:第十二章 并发编程 12.1 线程执行模型12.2 多线程之间并发通信12.3 其他并发问题   使用应用级并发的应用程序称为并发程序.现代操作系统提供三种基本的构造并发程序的方法: 进程 ...

  7. egg.js与mysql的结合使用,以及部署事项

    最近使用egg.js写了一个小项目练手,主要用来封装接口以及代理接口.进入正题: egg搭建以及各项配置 可以详见官方文档:https://eggjs.org,这里简单描述一下: 1.直接使用脚手架快 ...

  8. eval、exec及元类、单例实现的5种方法

    eval内置函数 # eval内置函数的使用场景:#   1.执行字符串会得到相应的执行结果#   2.一般用于类型转化,该函数执行完有返回值,得到dict.list.tuple等​dic_str = ...

  9. EntityFramework Core 2.1重新梳理系列属性映射(一)

    前言 满血复活啦,大概有三个月的时间没更新博客了,关于EF Core最新进展这三个月也没怎么去看,不知现阶段有何变化没,本文将以EF Core 2.1稳定版本作为重新梳理系列,希望对看本文的你有所帮助 ...

  10. Django auth认证

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Djang ...