繁体   English   中英

为什么尽管存在无限循环,该Python服务还是会自行停止?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM