为什么这个Python服务本身停止,尽pipe是无限循环?

我设法在ActiveState中使用这个配方安装Python脚本作为服务win-services-helper

为了获得更多的用途,我把我的程序的业务结束包括在99 – 100行:

  95 class Test(Service): 96 def start(self): 97 self.runflag=True 98 while self.runflag: 99 # My logging script 100 # goes here 101 def stop(self): 102 self.runflag=False 103 self.log("I'm done") 105 106 instart(Test, 'aTest', 'Python Service Test') 

我的问题是,该服务只logging一个条目,然后自行停止。 然后我去services.msc ,尝试再次启动服务,然后Windows显示此消息:

本地计算机上的Python服务testing服务启动,然后停止。 某些服务在无需执行任何操作时会自动停止,例如“性能日志和警报”服务。

当我把它放在一个无限循环的时候,我的服务怎么会认为它没有任何关系? 只有当我closures计算机并在下一次打开计算机时重新开始工作,即使没有任何人login,它也应该停止。

注:我的日志logging脚本使用简单的文件读取/写入csv 。 它不使用任何奇特的日志logging模块。

我相信当遇到错误时,这条消息也会出现。 运行该服务的用户不是不可能在日志文件中写入权限。 您可以尝试创建该csv文件并设置访问权限,以便“Everyone”可以写入。

它现在有效。 感谢大家的见解!

配方由两个脚本组成:

  • winservice.py
  • winservice_test.py

在我以前的尝试中,我挑出了一些我认为有用的线条。 我可能错过了其中的一些,因此它没有工作。

我离开了winservice.py 。 对于我的脚本的业务结束,我把它放在winservice_test.py的循环结构中。

编写代码之后,我去了命令行,浏览了两个脚本的存储位置,然后安装了这个服务

 python winservice_test.py 

我的服务现在可以通过services.msc访问。 默认情况下,它以本地系统帐户运行,这会在注销时出现问题。 该服务仍将继续,但会停止,因为该帐户不具有对日志文件夹的写入权限。

我修改了它的属性,以便使用我的用户帐户(它具有对日志文件夹的写入权限)运行。 我的服务现在保持退出状态,仅在关机时停止工作,并且即使没有任何人登录,也会在Windows启动后自动启动。

您需要在确定服务停止时查看整个代码,并且可以使用其他工具(如python守护进程)来控制代码。