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