为什么这个Python服务会在无限循环的情况下自行停止?

2024-10-03 17:22:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我成功地使用this recipe at ActiveState: ^{}将Python脚本作为服务安装。在

为了充分利用它,我在程序中加入了业务端,替换了第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显示以下消息:

The Python Service Test service on Local Computer started and then stopped. Some services stop automatically when they have no work to do, for example, the Performance Logs and Alerts service.

为什么我的服务在我把它放在一个无限循环中时认为它没有什么关系?只有当我关闭计算机并在下次打开计算机时重新开始工作时才会停止,即使没有任何人登录。在

注意:我的日志脚本使用简单的文件读/写csv。它不使用任何花哨的日志记录模块。在


Tags: andtestself脚本def计算机service记录
3条回答

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

我相信当遇到错误时,这个信息也会出现。运行服务的用户不太可能没有写入日志文件的权限。您可以尝试创建csv文件并设置访问权限,以便“每个人”都可以对其进行写入。在

它现在起作用了。感谢大家的真知灼见!在

配方由两个脚本组成:

  • winservice.py
  • winservice_test.py

在我之前的尝试中,我挑选了一些我认为有用的台词。我可能错过了一些,所以没用。在

我离开了winservice.py原样。对于脚本的业务端,我将其放在winservice_test.py中的循环结构中。在

在编写代码之后,我进入命令行,浏览两个脚本的存储位置,然后使用安装服务

python winservice_test.py

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

我修改了它的属性,这样它就可以用我的用户帐户(对日志文件夹有写访问权限)运行。我的服务现在可以从注销中幸存下来,只有在关机时才停止工作,而且即使没有任何人登录,当Windows启动时也会自动启动。在

相关问题 更多 >