Python程序封装成Windows服务实践

1. WinSW 工具概述

WinSW(Windows Service Wrapper)是一个轻量级的、开源的工具,用于将任何可执行文件(包括exe、jar、脚本文件等)包装成一个Windows服务。这意味着,原本设计为命令行应用或需要手动启动的程序,可以通过WinSW配置成为能够在Windows系统后台自动启动、停止、重启的服务,而无需用户登录或进行额外的手动干预。

1.1. 主要特点

开源与轻量级:

  • WinSW采用MIT许可证,完全开源,允许用户在其基础上进行修改和分发。
  • 作为一个轻量级的工具,WinSW占用的系统资源较少,适合在各种规模的Windows系统上使用。

灵活配置:

  • WinSW通过读取一个XML配置文件(通常命名为winsw.xml)来定义服务的行为。这个配置文件包含了服务的名称、可执行文件路径、启动参数、服务描述、日志配置等信息。
  • 用户可以通过编辑XML配置文件来快速设置服务,而无需编写复杂的代码。

日志记录与故障排查:

  • WinSW支持自定义日志输出位置和级别,方便用户进行故障排查和监控服务的运行状态。

灵活的进程管理:

-WinSW允许用户自定义启动、停止、重启命令以及相关的错误处理逻辑,提高了服务的稳定性和可靠性。

易于扩展、集成:

  • 由于其简单易用的特性,WinSW常被用于Java应用、Node.js应用以及其他需要作为后台服务运行的场景。它可以帮助用户快速地将这些应用封装为Windows服务,实现自动化管理。
  • WinSW支持通过插件机制添加自定义行为,如发送邮件通知、记录额外的日志信息等,满足了不同用户的个性化需求。

1.2. 使用场景

自动化任务:
如果你有一个需要持续运行的脚本或程序,WinSW可以将其变为一个服务,使得它能在每次系统启动时自动运行。

开发和测试:
对于开发者来说,WinSW可以快速部署和移除服务以进行测试,提高了开发效率。

第三方应用程序集成:
如果你的应用不原生支持Windows服务模式,WinSW可以作为一个适配器,将其封装为服务以实现自动化管理。

1.3. 使用方法

下载与安装:
用户可以从WinSW的GitHub仓库(https://github.com/winsw/winsw/releases)下载WinSW的exe文件,并将其重命名为方便记忆的名称(如winsw.exe)。

编写XML配置文件:
用户需要编写一个XML配置文件(如winsw.xml),定义服务的属性(如服务名称、可执行文件路径、启动参数等)。例如官方给出的例子:

<service>
  <id>jenkins</id>
  <name>Jenkins</name>
  <description>This service runs Jenkins continuous integration system.</description>
  <env name="JENKINS_HOME" value="%BASE%"/>
  <executable>java</executable>
  <arguments>-Xrs -Xmx256m -jar "%BASE%\jenkins.war" --httpPort=8080</arguments>
  <log mode="roll"></log>
</service>

配置文件说明详见:https://github.com/winsw/winsw/blob/master/doc/xmlConfigFile.md

安装与管理服务:
使用winsw.exe和XML配置文件,用户可以通过命令行来安装、启动、停止、重启和卸载服务。

CommandDescription
installInstalls the service.
uninstallUninstalls the service.
startStarts the service.
stopStops the service.
restartStops and then starts the service.
statusChecks the status of the service.
refreshRefreshes the service properties without reinstallation.

2. 实践过程

2.1. 编写服务配置文件:

创建了一个名为 NewPVMgrid.xml(或类似名称,但确保文件扩展名为 .xml)的服务配置文件。
在配置文件中,您定义了服务的 ID、名称、描述以及可执行文件(这里是批处理脚本 pvMonitor.bat)。

<service>
  <id>pvmgrid</id>
  <name>New PVMgrid</name>
  <description>This service runs New PVMgrid Python script.</description>
  <executable>D:\Python\NewPVMgrid\utils\pvMonitor.bat</executable>
</service>  

2.2. 编写批处理脚本:

创建了一个名为 pvMonitor.bat 的批处理脚本,用于设置工作目录并调用 Python 脚本。
批处理脚本首先更改到包含 Python 脚本的目录,然后使用自定义的 Python 解释器(或重命名的 Python 解释器)来运行 MonitorProcess.py。

@echo off
D:
cd D:\Python\NewPVMgrid\utils
pvmonitor_py1  MonitorProcess.py

2.3. 配置 Python 环境:

将 Python 解释器重命名为 pvmonitor_py1(或类似名称),以便更容易地识别进程。
请注意,如果您将 Python 解释器重命名,则需要确保它仍然位于系统的 PATH 环境变量中,或者您需要在批处理脚本中使用完整路径来调用它。
在这里插入图片描述

2.4. 部署和测试:

使用 WinSW 提供的工具(如 WinSW.-x64exe被更名为NewPVMgrid.exe)来安装服务。
在这里插入图片描述

D:\Python\NewPVMgrid\utils>NewPVMgrid uninstall
2024-07-10 11:25:11,106 INFO  - Uninstalling service 'New PVMgrid (pvmgrid)'...
2024-07-10 11:25:11,112 INFO  - Service 'New PVMgrid (pvmgrid)' was uninstalled successfully.

D:\Python\NewPVMgrid\utils>NewPVMgrid install
2024-07-10 11:27:08,464 INFO  - Installing service 'New PVMgrid (pvmgrid)'...
2024-07-10 11:27:08,483 INFO  - Service 'New PVMgrid (pvmgrid)' was installed successfully.

在服务管理控制台(services.msc)中验证服务是否已正确安装并可以启动。
在这里插入图片描述
在任务管理器中看到的是Python 解释器重命名为 pvmonitor_py1
在这里插入图片描述

2.5. 实践中遇到的问题

2.5.1. 关于python与pythonw

  • python:这是Python的标准解释器,用于在命令行界面(CLI)或脚本中执行Python代码。它允许输出显示在控制台或命令行窗口中,并且可以与用户进行交互(如读取输入)。
  • pythonw:这个执行文件与python非常相似,但它设计用于运行不需要控制台窗口的图形界面(GUI)应用程序。使用pythonw时,不会打开命令行窗口,且所有输出默认被丢弃(除非重定向到文件或其他输出流)。

Windows服务管理器可能以特定的方式处理与pythonw相关的进程,这可能导致服务无法正确启动或管理。

2.5.2. 批处理中的start

@echo off
D:
cd D:\Python\NewPVMgrid\utils
start pvmonitor_py  MonitorProcess.py

在批处理文件 pvMonitor.bat 中,使用了 start 命令来运行 Python 脚本。start 命令会启动一个新的窗口(即使使用了 start /B,但在某些情况下,特别是在服务上下文中,它可能不会按预期工作)来运行指定的程序。在服务中,通常不希望这样做,因为服务应该在后台无窗口地运行,去掉start即可

3. 结论

WinSW是一个功能强大、易于使用的Windows服务封装工具,它通过将任何可执行文件包装为服务,实现了自动化管理和监控python程序。无论是开发者、系统管理员还是自动化爱好者,都可以通过WinSW来简化Windows服务的创建和管理过程。

参考:
温旧酒一壶~. WinSW将Python项目封装成Windows服务(软件开机自启). CSDN博客. 2024.05.28

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/789670.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

03 数据加工层 如何精准匹配用户画像与物品画像?

我们讲解了个性化流量分发体系搭建流程中的数据加工阶段&#xff0c;不过在前面我们主要讲解了如何构建结构化标签&#xff0c;并未提及用户画像和物品画像的构建&#xff0c;以及如何将用户画像与物品画像进行匹配。本节课我们探讨下如何通过深加工帮助用户快速获取有效信息。…

漏洞挖掘思路分享 | 首次尝试cnvd捡洞

因为那天项目刚忙完闲来无事&#xff0c;尝试捡个cnvd洞&#xff0c;cnvd录取要五千万资产&#xff0c;自己又懒得找毕竟捡洞嘛&#xff0c;索性去cnvd上进行搜集 直接开搜弱口令&#xff0c;因为我比较喜欢有登录框的站&#xff0c;这样搜索出来的资产可能就更容易进行挖掘 随…

Paimon下载使用和基础操作说明

简介 Apache Paimon 是一种湖格式&#xff0c;支持使用 Flink 和 Spark 构建实时湖仓一体架构 用于流式处理和批处理操作。Paimon创新性地将湖格式与LSM&#xff08;Log-structured merge-tree&#xff09;相结合 结构&#xff0c;将实时流式更新引入 Lake 架构。 Paimon提供以…

IoC源码分析——singleton bean创建与循环依赖

文章目录 概要主流程bean的创建循环依赖 概要 容器初始化时&#xff0c;会创建单例bean&#xff0c;本文主要关注单例bean是如何创建的&#xff0c;并说明源码中是如何解决循环依赖的 代码入口 Testpublic void testIoC() {// ApplicationContext是容器的高级接口&#xff0c…

中霖教育怎么样?税务专业可以考哪些证书?

在税务专业领域&#xff0c;专业技能的认证对职业发展至关重要。以下为税务专业相关可以考的证书&#xff1a; 1. 注册税务师资格证书&#xff1a;该证书是税务专业人士的关键资质&#xff0c;使持证者可以从事税务相关工作。 2. 会计职称证书&#xff1a;会计系列证书分为初…

即时通讯平台项目测试(主页面)

http://8.130.98.211:8080/login.html项目访问地址&#xff1a;即时通讯平台http://8.130.98.211:8080/login.html 本篇文章进行项目主页面的测试。 在测试前需要先对待测内容进行分类&#xff0c;按照功能进行分类可以分为&#xff1a;个人信息设置、发送/接收消息、添加好友…

python-25-零基础自学python-处理异常三兄弟try-except-else

学习内容&#xff1a;《python编程&#xff1a;从入门到实践》第二版第十章 知识点&#xff1a; 程序异常如何处理&#xff1f;try-except-else try-尝试可能引起错误的步骤 except-错误步骤发生&#xff0c;打印一些需要用户知道的信息&#xff0c;没有就pass else-错误不…

【密码学】公钥密码的基本概念

在先前我写的密码学体制文章中谈到&#xff0c;现代密码学分为两大体制&#xff0c;介绍了一些有关对称密码体制诸如流密码和分组密码的内容。本文的主要内容则切换到公钥密码体制&#xff08;又称非对称密码体制&#xff09;&#xff0c;简述了公钥密码体制的基本思想和应用方…

MFC常见问题解决

文章目录 1. 单文档程序初始化显示设置问题解决方案 2. MFC中控件响应出错 1. 单文档程序初始化显示设置 问题 在Microsoft Foundation Classes (MFC) 中&#xff0c;单文档应用程序&#xff08;SDI&#xff09;的初始化时默认并不设置为最大显示。但你可以通过编程方式在程序…

传神论文中心|第16期人工智能领域论文推荐

在人工智能领域的快速发展中&#xff0c;我们不断看到令人振奋的技术进步和创新。近期&#xff0c;开放传神&#xff08;OpenCSG&#xff09;社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…

MiniGPT-Med 通用医学视觉大模型:生成医学报告 + 视觉问答 + 医学疾病识别

MiniGPT-Med 通用医学视觉大模型&#xff1a;生成医学报告 视觉问答 医学疾病识别 提出背景解法拆解 论文&#xff1a;https://arxiv.org/pdf/2407.04106 代码&#xff1a;https://github.com/Vision-CAIR/MiniGPT-Med 提出背景 近年来&#xff0c;人工智能&#xff08;AI…

Mybatis的学习

什么是MyBatis? MyBatis 是一款优秀的持久层框架&#xff0c;用于简化JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis,2010年这个项目由apache software foundation 迁移到了google code&#xff0c;并且改名为MyBatis。2013年11月迁移到Github 官网:https://mybatis…

Python的语言特性

1&#xff0c;python是动态语言 在编译期间就确定变量类型的语言是静态语言 在运行期间才知道变量类型的是动态语言 2&#xff0c;python是强类型语言 不同类型的变量是否允许隐式转换

简过网:哪些证书适合上班族考?这些证书挂着就能挣钱!

考证不一定暴富&#xff0c;但找工作时一定吃香 今天给大家整理几个比较吃香的证书&#xff01; 不仅含金量高还可以领补贴 建议大家有时间都考一考 普通人就冲一冲&#xff1a;教资、二建、一建、一造、监理&#xff01;&#xff01; ​ ★ 教师资格证书 报名时间&#x…

STM32G4 DMA的使用(寄存器开发)

下面以STM32G474为例&#xff0c;使用DMA来存储USART1的接收数据。 1. 查看硬件支持 首先查看要使用的DMA支持的通道数&#xff0c;在手册中有如下说明。 根据上图可以看到&#xff0c;对于不同的设备类型有不同的DMA通道数量。设备类型分类如下图所示。 我使用的是STM32G474…

获取天气数据

获取天气数据其实是一个简单的HTTP接口&#xff0c;根据用户输入的adcode&#xff0c;查询目标区域当前/未来的天气数据&#xff0c;数据来源是中国气象局。 第一步&#xff0c;申请”web服务 API”密钥&#xff08;Key&#xff09;&#xff1b; 链接: 首页 | 高德控制台 (am…

Redis基础教程(二十):Java使用Redis

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

架构师机器学习操作 (MLOps) 指南

MLOps 是机器学习操作的缩写&#xff0c;是一组实践和工具&#xff0c;旨在满足工程师构建模型并将其投入生产的特定需求。一些组织从一些自主开发的工具开始&#xff0c;这些工具在每次实验后对数据集进行版本控制&#xff0c;并在每个训练周期后对检查点模型进行版本控制。另…

Mybatis的优缺点及适用场景?

目录 一、什么是Mybatis&#xff1f; 二、Mybatis框架的特点 三、Mybatis框架的优点&#xff1f; 四、MyBatis 框架的缺点&#xff1f; 五、MyBatis 框架适用场合&#xff1f; 六、代码示例 1. 配置文件 mybatis-config.xml 2. 映射文件 UserMapper.xml 3. Java 代码…

了解劳动准备差距:人力资源专业人员的战略

劳动准备差距是一个紧迫的问题&#xff0c;在全球人事部门回应&#xff0c;谈论未开发的潜力和错过的机会。想象一下&#xff0c;人才和需求之间的悬崖之间有一座桥&#xff0c;这促使雇主思考&#xff1a;我们是否为员工提供了足够的设备来应对未来的考验&#xff1f; 这种不…