netcore项目在Windows部署:使用NSSM部署Windows服务
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服务的更多相关文章
- 部署NetCore项目(本文介绍用用IIS部署)
首先要下载安装Core Runtim: 然后在IIS中的模块中就可以看到如下内容: 这时环境就搭好了: 下面按照正常的发布流程走就行了,关键看下面(一定要选择无托管代码)
- dotnet-warp && NSSM 部署 .net core 项目到 windows 服务
如果你想将 .net core 项目以服务的形式部署到 windows 系统,希望本篇文章能够让你少走弯路 dotnet-warp 安装使用 dotnet-warp 是一个全局的.NET Core 工 ...
- 在Linux服务器部署 .NET-Core 项目
一.文章概要 这篇文章是讲述一个Linux 新手将 .NET-Core 项目部署在 Linux 服务器上的一个记录,以及在部署期间遇到的问题以及解决办法.有不恰当的地方.欢迎大神指正. 二.前期准备 ...
- netcore项目在Centos部署:nohup和supervisor方式
Centos上部署netcore项目 1 准备工作 在Centos上部署netcore应用程序有两种常用方式:nohup和supervisord,这里简单演示一下这两种部署方式. 首先我们写一个简单的 ...
- nssm 在windows上部署服务
简介 NSSM是一款可将Nodejs项目注册为Windows系统服务的工具.当你的Node.js项目需要部署在Windows Server上时,NSSM是一个不错的选择. 特点 NSSM将Node.j ...
- NetCore项目的部署
NetCore项目和以前的AspNet项目在部署上有很大的不同,因为NetCore是跨平台的 NetCore支持Kestrel和IIS两种方式,看代码的11行和14行 using System.IO; ...
- NSSM部署.Net Core到 Windows 服务
NSSM 官网http://www.nssm.cc/,下载地址http://www.nssm.cc/download 简单点理解就是NSSM可以把一些exe程序封装成Windows服务,然后exe程序 ...
- Windows程序的打包,部署(vs项目打包vs2013)---ShinePans
Windows 应用程序在开发完毕之后,怎样将程序打包并制作成安装程序在客户机上部署 是每一个windows应用程序开发完毕之后都必须面对的问题. 学习目标: 部 ...
- 使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S
使用Gitlab-CI 实现NetCore项目Docker化并部署到阿里云K8S 先行条件: 1.了解NetCore项目基础命令,如dotnet publish 等几个常用命令. 2.了解Dock ...
随机推荐
- 虹软免费人脸识别SDK注册指南
成为开发者三步完成账号的基本注册与认证:STEP1:点击注册虹软AI开放平台右上角注册选项,完成注册流程.STEP2:首次使用,登录后进入开发者中心,点击账号管理完成企业或者个人认证,若未进行实名认证 ...
- 【不定期更新】FPGA/IC岗位常见笔试面试题总结(基础知识)
1 数字IC(ASIC)设计流程: IC设计分为前端和后端.前端设计主要将HDL语言-->网表,后端设计是网表-->芯片版图. 前端主要有需求分析与架构设计.RTL设计.仿真验证.逻辑综合 ...
- java网络爬虫基础学习(三)
尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...
- Flink应用案例:How Trackunit leverages Flink to process real-time data from industrial IoT devices
January 22, 2019Use Cases, Apache Flink Lasse Nedergaard Recently there has been significant dis ...
- 转://从一条巨慢SQL看基于Oracle的SQL优化
http://mp.weixin.qq.com/s/DkIPwbDKIjH2FMN13GkT4w 本次分享的内容是基于Oracle的SQL优化,以一条巨慢的SQL为例,从快速解读SQL执行计划.如何从 ...
- C#字符串和ASCII码的转换
//字符转ASCII码: public static int Asc(string character) { if (character.Length == 1) { System.Text.ASCI ...
- ThinkPad T400 键帽下面的X支架的安装方法
有一台古老的T400,清理键盘的时候,X支架老化断了,淘宝买了几个支架,研究一下安装方法: 1.注意支架方向:上面是横向的细支架,下面是两个小孔2.用小螺丝刀把下面的两个小孔推进键盘下面的两个金属钩里 ...
- SSM项目使用GoEasy 获取客户端上下线实时状态变化及在线客户列表
一.背景 上篇SSM项目使用GoEasy 实现web消息推送服务是GoEasy的一个用途,今天我们来看GoEasy的第二个用途:订阅客户端上下线实时状态变化.获取当前在线客户数量和在线客户列表.截止我 ...
- [转帖][超级少儿不宜]一氧化氮(NO),为什么亚洲人是最硬
阴茎科学:一氧化氮(NO),为什么亚洲人是最硬 尼堪巴图鲁 关注他 2,911 人赞同了该文章 https://zhuanlan.zhihu.com/p/55941740 超级少儿不宜.. ...
- IntelliJ IDEA 2018 最新版注册码
参考:IntelliJ IDEA 2018注册码(无需修改hosts文件) :