我设法在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守护进程)来控制代码。