Python程序封装成Windows服务实践

news2024/9/27 17:33:49

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.coloradmin.cn/o/1914420.html

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

相关文章

如何整合生成的人工智能?(GenAI)为你未来的工作增加动力

生成人工智能(GenAI)它发展迅速&#xff0c;以前所未有的速度取得了突破。人工智能将继续改变各行各业&#xff0c;预计2023年至2030年的年增长率将达到37.3%。由于一种新的知识工作者现在面临被取代的风险&#xff0c;生成式人工智能的惊人崛起进一步加剧了这种紧迫性。据《未…

高并发内存池联调问题

断言报错1 在这里插入图片描述 排查原因 实际 actualNum 值并没有大于一 断点报错。 经过排查&#xff0c;此处assert&#xff08;actualNum > 0) 判断条件应该是大于零&#xff0c;否则或许if判断条件无法执行。 跑通结果: 2

大数据之Hadoop平台的搭建

实验环境 三台虚拟机 master slave1 slave2 服务器集群单节点&#xff0c;机器最低配置&#xff1a;双核 CPU、8GB 内存、100G 硬盘运行环境CentOS 7.4服务和组件服务和组件根据实验需求安装 1实验过程 1.1实验任务一&#xff1a;配置 Linux 系统基础环境 1.1.1步骤一&a…

漂亮的不像话的网站首屏,直接勾起了用户浏览欲望。

漂亮大气的网站首屏页面可以激发用户的浏览欲望&#xff0c;主要通过以下几个方面的设计和呈现来实现&#xff1a; 引人注目的视觉效果&#xff1a;使用高质量的图片、精心设计的图形和动画效果来吸引用户的眼球。这些视觉元素应当与网站的主题和品牌形象相符&#xff0c;并能够…

springboot“小鱼在乎”日程计划系统-计算机毕业设计源码51307

摘要 本文介绍了一种基于微信小程序和Spring Boot后端服务的“小鱼在乎”日程计划系统。该系统结合了前端微信小程序的便捷交互与后端Spring Boot框架的稳健性能&#xff0c;为用户提供了一款功能全面、体验出色的日程管理工具。 “小鱼在乎”日程计划系统涵盖了多种功能&#…

提升困难生学工支持:智慧校园的新功能介绍

智慧校园的学工管理系统内嵌的困难生信息管理功能&#xff0c;是一个综合性的服务平台&#xff0c;专注于精准识别校园内的经济困难学生&#xff0c;并给予他们必要的帮助与关怀&#xff0c;确保每位学生都能在公平的环境中追求学业和个人成长。这一功能通过一系列信息化手段&a…

Linux Web服务器

文章目录 一、web服务1.1 http1.2 Web1.3 web中间件 二、 Apache服务的搭建与配置2.1 服务安装基本思路三、 Nginx 配置Web服务 一、web服务 以赛促学的内容:因不清楚出题使用何种服务,特将两种服务归纳总结. HTTP是数据传输的规则&#xff0c;Web是基于HTTP协议的服务。当今…

基于ry-vue-plus的代码生成工具整合自定义模版

前言 鉴于自己最近参加一个比赛&#xff0c;整区块链应用&#xff0c;因此部分核心数据需要往区块链网络的数据库中存储。用的区块链框架为FISCO-BCOS。FISCO-BCOS官方提供一一个预编译合约&#xff0c;名叫Table.sol (CRUD合约),能让我们通过CRUD合约像使用一般关系型数据库中…

【漏洞复现】WordPress插件Recall CVE-2024-32709 SQL注入漏洞

0x01 产品简介 WordPress是一款免费开源的内容管理系统(CMS)&#xff0c;最初是一个博客平台&#xff0c;但后来发展成为一个功能强大的网站建设工具&#xff0c;适用于各种类型的网站&#xff0c;包括个人博客、企业网站、电子商务网站等&#xff0c;并逐步演化成一款内容管理…

bug - while parsing file included at

bug 如下 找到这个对应文件tb_top.sv的对应行&#xff0c;发现是一个 include "inc_tb_tests_xxx.sv" 问题点&#xff1a;头文件&#xff0c;重复定义&#xff0c;那么 解决方法- 在被include的文件首尾加入 ifndef MY_TRANSACTION__SV define MY_TRANSACTION__SV …

【经典链表OJ】环形链表

一、题目要求 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

昇思25天学习打卡营第16天|应用实践之Vision Transformer图像分类

基本介绍 今天同样是图像分类任务&#xff0c;也更换了模型&#xff0c;使用的时候计算机视觉版的Transformer&#xff0c;即Vision Transformer&#xff0c;简称ViT。Transformer本是应用于自然语言处理领域的模型&#xff0c;用于处理语言序列&#xff0c;而要将其应用于图像…

百度网盘青春版网页版上线

不知道还有多少小伙伴记得百度网盘曾经出过一个青春版&#xff0c;原因是21年相关部门发布通知《工业和信息化部关于开展信息通信服务感知提升行动的通知》其中就有一条&#xff1a; 明确指出网盘向免费用户提供的上传和下载最低速率应满足基本的下载需求 正所谓上有政策下有对…

常用的设计模式和使用案例汇总

常用的设计模式和使用案例汇总 【一】常用的设计模式介绍【1】设计模式分类【2】软件设计七大原则(OOP原则) 【二】单例模式【1】介绍【2】饿汉式单例【3】懒汉式单例【4】静态内部类单例【5】枚举&#xff08;懒汉式&#xff09; 【三】工厂方法模式【1】简单工厂模式&#xf…

AI绘画小白必备!Stable Diffusion常用插件合集,好用推荐!(附插件下载)

前言 宝子们&#xff0c;早上好啊~Stable Diffusion 常用插件&#xff0c;月月已经给大家整理好了&#xff0c;自取就好。 拥有这些SD常用插件&#xff0c;让您的图像生成和编辑过程更加强大、直观、多样化。以下插件集成了一系列增强功能&#xff0c;覆盖从自动补全提示词到…

设置DepthBufferBits和设置DepthStencilFormat的区别

1&#xff09;设置DepthBufferBits和设置DepthStencilFormat的区别 2&#xff09;Unity打包exe后&#xff0c;游戏内拉不起Steam的内购 3&#xff09;Unity 2022以上Profiler.FlushMemoryCounters耗时要怎么关掉 4&#xff09;用GoodSky资产包如何实现昼夜播发不同音乐功能 这是…

东旭蓝天被控股股东占用78亿:近七年业绩奇差,或面临退市

《港湾商业观察》施子夫 张楠 在7月5日一口气发了超过30份公告后&#xff0c;终于让投资者对于东旭蓝天2023年和今年一季度经营业绩有了更清晰的观察。 与此同时&#xff0c;东旭蓝天&#xff08;下称&#xff09;也收到了深交所的关注函。种种不利因素之下&#xff0c;上市…

【竞技宝 】欧洲杯:赛事水货盘点

本届欧洲杯接近尾声,有些球员抓住机会趁势崛起,踢出了身价。可惜还有一些球员的表现无法让球迷和媒体满意,下面我们就来盘点下本届欧洲杯的水货球员,看看哪些人因为糟糕的表现上榜? 格瓦迪奥尔(克罗地亚) 本届欧洲杯是克罗地亚黄金一代球员的谢幕之战,原本格瓦迪奥尔作为球队…

凌凯科技前五大客户依赖症加剧:研发费用率骤降,应收账款大增

《港湾商业观察》黄懿 6月13日&#xff0c;上海凌凯科技股份有限公司&#xff08;下称“凌凯科技”&#xff09;在港交所提交上市申请&#xff0c;拟于主板上市&#xff0c;华泰国际为其独家保荐人。 凌凯科技致力于提供小分子化合物技术和产品解决方案&#xff0c;专注于制药…

探索东芝 TCD1304DG 线性图像传感器的功能

主要特性 高灵敏度和低暗电流 TCD1304DG 具有高灵敏度和低暗电流&#xff0c;非常适合需要精确和可靠图像捕捉的应用。传感器包含 3648 个光敏元件&#xff0c;每个元件尺寸为 8 m x 200 m&#xff0c;确保了出色的光灵敏度和分辨率。 电子快门功能 内置的电子快门功能是 T…