太阳当空照-Windows服务化方式NSSM应用

2023-11-21 06:20

本文主要是介绍太阳当空照-Windows服务化方式NSSM应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

之前章节介绍了,sc.exeinstsrvsrvanyWinsw进行在Windows系统中的应用程序服务化操作,本章讲解Windows系统中,服务化的另一个利器Nssm

ggcy-blog-service-sc-header

文章目录

    • 前言
    • 工具介绍
      • 源码地址
      • 程序下载
    • 基础指令
      • 常用指令
        • 安装
        • 启动
        • 修改
        • 查看配置
        • 查看状态
        • 停止
        • 卸载
    • 案例实践
        • 安装服务
          • 服务列表
          • 服务查询
        • 启动服务
        • 停止服务
        • 卸载服务

工具介绍

Nssm全称为the Non-Sucking Service Manager,翻译为不是很糟糕的服务管理工具,参考链接:https://nssm.cc/

nssm is a service helper which doesn’t suck. srvany and other service helper programs suck because they don’t handle failure of the application running as a service. If you use such a program you may see a service listed as started when in fact the application has died. nssm monitors the running service and will restart it if it dies. With nssm you know that if a service says it’s running, it really is. Alternatively, if your application is well-behaved you can configure nssm to absolve all responsibility for restarting it and let Windows take care of recovery actions.

nssm logs its progress to the system Event Log so you can get some idea of why an application isn’t behaving as it should.

nssm also features a graphical service installation and removal facility. Prior to version 2.19 it did suck. Now it’s quite a bit better.

Google翻译:

nssm是一个不错的服务助手。 srvany 和其他服务帮助程序很糟糕,因为它们不处理作为服务运行的应用程序的故障。 如果您使用这样的程序,您可能会看到一个服务被列为已启动,而实际上该应用程序已经死亡。 nssm监视正在运行的服务,如果它死了,它将重新启动它。 使用 nssm,您知道如果服务说它正在运行,它确实是。 或者,如果您的应用程序表现良好,您可以配置 nssm以免除重新启动它的所有责任,并让 Windows 负责恢复操作

实际上,Nssm这些描述还停留在n年前,虽然srvany在高版本Windows系统中,已经不再升级,但并不妨碍,工具包的安装和使用,Winsw也能够输出异常日志,就目前来说,nssm从操作便捷度上看,还是优于目前笔者已知的其他工具

源码地址

git://git.nssm.cc/nssm/nssm.git or http://git.nssm.cc/nssm/nssm.git

程序下载

https://nssm.cc/release/nssm-2.24.zip

解压后,服务分为两个版本,一个是32位,一个是64位,依据需求进行选择

blog-jrz-nssm-dir

基础指令

常用指令

安装

服务名称(Path),启动路径(Startup directory)和服务名(Service name)属于必填项,其他配置,要么可以选择默认

nssm install <servicename>

blog-jrz-nssm-cmd01

启动

根据服务名称启动服务

nssm start <servicename>
修改

用于设置对应服务的特定配置

nssm set <servicename> <parameter>
查看配置

根据服务名称获取对应的配置值

nssm set <servicename> <parameter>
查看状态
nssm status <servicename>
停止

停止服务运行

nssm stop <servicename>
卸载

卸载服务

nssm remove <servicename>

blog-jrz-nssm-cmd02

卸载成功

blog-jrz-nssm-cmd03

更多指令配置请查看笔者的文章太阳当空照-Windows服务化方式NSSM指令清单

案例实践

案例,为基于.Net Core的一个简单控制台程序,功能和之前笔者文章中,进行服务化的控制台程序一致,原来的配方,项目名换成nssmtest,内容如下:

static void Main(string[] args)
{while (true){string datestr = DateTime.Now.ToString("HH:mm:ss");//休眠一秒,输出一秒日期时间字符串特定文本文件Thread.Sleep(1000);LogMsg(datestr);}
}private static void LogMsg(string msg)
{//System.AppDomain.CurrentDomain.BaseDirectory//获取程序集目录:C:\Windows\Temp\.net\sctest//System.Environment.CurrentDirectory//获取该进程从中启动的目录:C:\Windows\system32//System.IO.Directory.GetCurrentDirectory()//获取当前应用工作路径:C:\Windows\system32//获取当前进程所属的执行exe文件名称string filename = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;string dictoryPath = Path.GetDirectoryName(filename);string path = System.IO.Path.Combine(dictoryPath, $"{DateTime.Now.ToString("yyyy-MM-dd")}.log");using (var writer = File.AppendText(path)){writer.WriteLine($"当前时间:{msg}");}
}

发布后目录如下:

blog-jrz-nssm-casedir

以管理员权限执行cmd,切换路径到nssm程序集目录下,此处为E:\DownLoads\nssm-2.24\win64

安装服务
>nssm install
Service "nssmtest" installed successfully!

选择对应exe发布路径

blog-jrz-nssm-caseinstall

确认无误后,点击按钮[Install service],提示安装成功

blog-jrz-nssm-caseinsuccess

查看服务列表或者执行服务查询指令,可查看到对应服务是否存在,进行二次核查确认

服务列表

blog-jrz-nssm-caseservice

服务查询
>nssm status nssmtest
SERVICE_STOPPED

>sc query nssmtest 
SERVICE_NAME: nssmtestTYPE               : 10  WIN32_OWN_PROCESSSTATE              : 1  STOPPEDWIN32_EXIT_CODE    : 1077  (0x435)SERVICE_EXIT_CODE  : 0  (0x0)CHECKPOINT         : 0x0WAIT_HINT          : 0x0
启动服务
>nssm start nssmtest
nssmtest: START: 操作成功完成。

查看状态

>nssm status nssmtest
SERVICE_RUNNING

blog-jrz-nssm-caserun

执行程序目录下生成对应时间输出文件

blog-jrz-nssm-runresult

停止服务
>nssm stop nssmtest
nssmtest: STOP: 操作成功完成。
>nssm status nssmtest
SERVICE_STOPPED

blog-jrz-nssm-casestop

卸载服务
>nssm remove nssmtest
Service "nssmtest" removed successfully!

blog-jrz-nssm-caseremove

卸载成功

blog-jrz-nssm-removesuccess

>nssm status nssmtest
Can't open service!
OpenService(): 指定的服务未安装。

以上即为笔者对于在Windows上实现应用程序服务化,使用nssm的基本操作,如需要上述测试程序,评论或者私信笔者

这篇关于太阳当空照-Windows服务化方式NSSM应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400423

相关文章

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,