太阳当空照-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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Vue3视频播放组件 vue3-video-play使用方式

《Vue3视频播放组件vue3-video-play使用方式》vue3-video-play是Vue3的视频播放组件,基于原生video标签开发,支持MP4和HLS流,提供全局/局部引入方式,可监听... 目录一、安装二、全局引入三、局部引入四、基本使用五、事件监听六、播放 HLS 流七、更多功能总结在 v

利用Python操作Word文档页码的实际应用

《利用Python操作Word文档页码的实际应用》在撰写长篇文档时,经常需要将文档分成多个节,每个节都需要单独的页码,下面:本文主要介绍利用Python操作Word文档页码的相关资料,文中通过代码... 目录需求:文档详情:要求:该程序的功能是:总结需求:一次性处理24个文档的页码。文档详情:1、每个

Java发送SNMP至交换机获取交换机状态实现方式

《Java发送SNMP至交换机获取交换机状态实现方式》文章介绍使用SNMP4J库(2.7.0)通过RCF1213-MIB协议获取交换机单/多路状态,需开启SNMP支持,重点对比SNMPv1、v2c、v... 目录交换机协议SNMP库获取交换机单路状态获取交换机多路状态总结交换机协议这里使用的交换机协议为常

k8s admin用户生成token方式

《k8sadmin用户生成token方式》用户使用Kubernetes1.28创建admin命名空间并部署,通过ClusterRoleBinding为jenkins用户授权集群级权限,生成并获取其t... 目录k8s admin用户生成token创建一个admin的命名空间查看k8s namespace 的

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Pandas处理缺失数据的方式汇总

《Pandas处理缺失数据的方式汇总》许多教程中的数据与现实世界中的数据有很大不同,现实世界中的数据很少是干净且同质的,本文我们将讨论处理缺失数据的一些常规注意事项,了解Pandas如何表示缺失数据,... 目录缺失数据约定的权衡Pandas 中的缺失数据None 作为哨兵值NaN:缺失的数值数据Panda