[英]Why does this Python service stop by itself in spite of an infinite loop?
我设法在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')
我的问题是,该服务仅记录一个条目,然后自行停止。 然后我转到services.msc
,尝试再次启动该服务,然后Windows显示此消息:
本地计算机上的Python Service Test服务已启动,然后停止。 某些服务没有任何工作时会自动停止,例如,性能日志和警报服务。
当我将其置于无限循环中时,服务为何会认为与它无关? 仅当我关闭计算机并在下次打开计算机时重新开始工作时,它才停止,即使没有人登录。
注意:我的日志记录脚本使用对csv
简单文件读/写。 它不使用任何奇特的日志记录模块。
我相信遇到错误时也会出现此消息。 运行该服务的用户不太可能没有写入日志文件的权限。 您可以尝试创建该csv文件并设置访问权限,以便“每个人”都可以写入该文件。
现在可以使用了。 感谢大家的见解!
配方由两个脚本组成:
winservice.py
winservice_test.py
在之前的尝试中,我挑选了一些我认为有用的行。 我可能想念其中的一些,因此没有用。
我winservice.py
原样离开了winservice.py
。 对于脚本的业务目的,我将其放在winservice_test.py
中的循环结构中。
编写代码后,我转到命令行,浏览到两个脚本的存储位置,然后使用
python winservice_test.py
现在可以通过services.msc
访问我的服务。 默认情况下,它以“ 本地系统帐户”运行,这在注销时会出现问题。 该服务仍将继续,但是由于该帐户没有对日志文件夹的写访问权,它将停止运行。
我修改了它的属性 ,使其与我的用户帐户一起运行(该用户帐户具有对日志文件夹的写访问权)。 我的服务现在可以在注销后继续运行,仅在关机时才停止工作,并且即使没有任何人登录也可以在Windows启动时立即自动启动。
确定服务停止时,您需要查看整个代码,并且可以使用python daemonize等其他工具来控制代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.