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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

内存条必备知识

什么是内存条&#xff1f; 内存条&#xff1a;又称为随机存取存储器&#xff08;RAM&#xff09;&#xff0c;也叫主存&#xff0c;是与CPU直接交换数据的内部存储器。它可以随时读写&#xff08;刷新时除外&#xff09;&#xff0c;而且速度很快&#xff0c;通常用来暂时存储…

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

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

碳化硅陶瓷膜的基本性能

碳化硅陶瓷膜作为一种由碳化硅(SiC)材料制成的高温陶瓷膜&#xff0c;以其独特的性能在多个领域得到了广泛的应用。以下是碳化硅陶瓷膜的基本性能&#xff0c;详细阐述如下&#xff1a; 一、电绝缘性 碳化硅陶瓷膜通常具有较好的电绝缘性&#xff0c;这一特性在高温环境中尤为重…

牛刀小试--下三角对称矩阵压缩存储

解析博客: 矩阵存储和特殊矩阵的压缩存储_n阶对称矩阵压缩-CSDN博客 函数功能: //为N阶下三角矩阵初始化成的一维数组分配空间 void Init_triangular_matrix(int *&matrix); //返回二维下三角矩阵的值(压缩存取) int get_Value_triangular_matrix(int matrix[],int x,int …

物流数据分析成本利润计算软件,佳易王物流货运单管理系统操作教程

前言&#xff1a; 物流数据分析成本利润计算软件&#xff0c;佳易王物流货运单管理系统操作教程 以下软件操作教程以&#xff0c;佳易王物流单统计分析软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件操作教程 1、佳易王物流货运…

数字人+展厅互动体验方案:多元化互动方式,拓宽文化文娱新体验

数字化创新已成为推动展厅可持续发展&#xff0c;创造全新消费体验&#xff0c;满足游客多元化需求的关键力量。 “数字人数字互动展厅”可以适应年轻一代的文化传播与多媒体互动新体验趋势&#xff0c;打造新生代潮玩聚集地&#xff0c;促进文化创意传播与互动体验场景创新&a…

CC2530寄存器编程学习笔记_按键中断

目录 无中断按键 第一步 分析原理图 电路工作原理 第二步 配置寄存器 第一步 配置为通用IO口 第二步 配置为输入 第三步 输入模式选择 按键抖动 中断按键 第一步中断寄存器的配置 上升沿 下降沿 第一步 开启总中断使能 第二步 开启端口中断使能 第三步 开启端口引…

传统中小企业如何布局短视频矩阵?云微客说别踩坑

如今社会&#xff0c;不管是老少都在刷短视频&#xff0c;短视频已经成为大家受欢迎的内容形式之一了。很多企业和个人看到了短视频赛道的这个商机&#xff0c;纷纷投身于短视频制作中&#xff0c;都想为了能够在竞争激烈的市场中脱颖而出。 但是&#xff0c;短视频账号并不是一…

精益思维驱动未来:人工智能产品设计的新篇章

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融服务&#xff0c;AI的应用场景越来越广泛。然而&#xff0c;如何确保AI产品在设计之初就具备高效、灵活和可持…

ITIL4认证考试注意事项(附考试答题攻略)

作为一位持有ITIL4中级认证的IT服务管理专家&#xff0c;我深知备考ITIL4认证考试的重要性。在此分享我的复习备考经验&#xff0c;帮助你顺利通过考试。 1. 制定复习计划 制定详细的复习计划是备考的第一步。合理安排每天的复习时间&#xff0c;重点复习ITIL4的关键概念、四个…

CSS 【实用教程】(2024最新版)

CSS 简介 CSS 是层叠样式表( Cascading Style Sheets ) 的简写&#xff0c;用于精确控制 HTML 页面的样式&#xff0c;以便更好地展示图文信息或产生炫酷/友好的交互体验。 没有必要让所有浏览器都显示得一模一样的&#xff0c;好的浏览器有更好的显示&#xff0c;糟糕的浏览器…

E. Beautiful Array(cf954div3)

题意&#xff1a;给定一个数组&#xff0c;可以先对数组进行任意排序&#xff0c;每次操作可以选择一个ai&#xff0c;将它变成aik&#xff0c; 想让这个数组变成一个美丽数组&#xff08;回文数组&#xff09;&#xff0c;求最少操作次数 分析&#xff1a; 先找出相同的数字…

C++Windows环境搭建(CLion)

文章目录 CLion下载安装CLion下载CLion安装新建项目新建一个文件基础设置字体设置clion中单工程多main函数设置 参考 CLion下载安装 CLion下载 打开网址&#xff1a;https://www.jetbrains.com/clion/download/ 点击Download进行下载。 CLion安装 双击下载好的安装包&…

华为浏览器,Chrome的平替,插件无缝连接

文章目录 背景插件书签 背景 不知道各位小伙伴有没有这样的痛点&#xff0c;办公电脑、家里的电脑还有手机、平板等&#xff0c;收藏了一个网址或者在手机上浏览了某个网页&#xff0c;保存起来&#xff0c;可是一换平台或者换个电脑&#xff0c;在想要浏览之前收藏的东西&…

伺服【禾川X6】

驱动器&#xff1a; A&#xff1a;脉冲 B&#xff1a;EtherCAT // SV-X6 FB 040 AA 一套360 N&#xff1a;CANopen R&#xff1a;PROFINET 电机&#xff1a; SV-X6 MA 040A-B2 KA

将windows下载的包传到linux服务器上

以一个例子说明。 要将下面的docker压缩包上传到对应的172.39.18.2ip的服务器上。 使用如下命令 scp F:\下载内容\docker-20.10.7.tgz root172.39.18.2:/root/test/ 注意是在windows的cmd命令行中。

新版FMEA培训未能达到预期效果怎么办?

在制造业的质量管理中&#xff0c;FMEA&#xff08;Failure Mode and Effects Analysis&#xff0c;失效模式与影响分析&#xff09;是一项至关重要的工具&#xff0c;它帮助企业识别和评估产品或过程中潜在的失效模式&#xff0c;以及这些失效模式可能导致的后果。然而&#x…

FastAPI 学习之路(三十六)引入APIRouter

本次调整后的目录如下&#xff1a; 我们可以使用APIRouter来声明路径操作&#xff0c;我们先看下如何去使用。 我们根据选择划分为users和items来细分。 具体实现如下&#xff1a; ①先看items实现 from fastapi import APIRouter from fastapi import Depends from models.…

Unity AssetsBundle 详解

文章目录 1.AssetBundle 概念2.AssetBundle 优势3.AssetBundle 特性4.AssetBundle 使用流程4.1 分组4.2 打包4.3 加载包4.4 加载资源4.5 卸载资源 5.AssetBundleManifest6.AssetBundle的内存占用7.AB包资源加密 1.AssetBundle 概念 AssetBundle又称AB包&#xff0c;是Unity提供…

如何用Vue3和Plotly.js创建交互式表格?

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Plotly.js 动态生成 HTML 表格 应用场景介绍 在数据分析和可视化领域&#xff0c;经常需要以表格的形式展示数据。Plotly.js 是一款功能强大的 JavaScript 库&#xff0c;不仅可以创建交互式图表&#xff0c;…