簡體   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