powershell 正在启动python无限循环作为windows服务?

gijlo24d  于 2023-08-05  发布在  Shell
关注(0)|答案(1)|浏览(150)

我正在尝试学习一些新的东西,也许这是基本的问题,但无法找到解决方案在谷歌上。
我有Python脚本,需要在后台无限运行的Windows服务,更容易管理(停止,启动,删除和安装服务)。因为我计划从react应用程序控制此服务。


的数据
下面是我的python模拟代码:

import threading ,time,sys
def start() :
    while True :
        time.sleep(1)
        open(r'E:\test.log', 'w').write('heelo\n')
threading.Thread(target=start).start()

字符串
由于我有无限循环,当服务启动时,它会超时,因为py脚本没有返回退出状态。
这是我的powershell脚本来管理服务。

param(
    [string]$arg1
)

# Define your service name, display name, and description
$serviceName = "nmsCore"
$displayName = "NMS CORE SERVICE"
$description = "This is a sample service."

# Define the path to your Python executable and the script
$pythonExecutable = "E:\Python_Venv\env310_1\Scripts\python.exe"
$scriptPath = "E:\Working\nmscore\v1\pycode\nmscore_service.py"
$arg1_value = $arg1
# Switch statement to handle different commands

switch ($arg1_value) {
    "install" {
        # Create the service
        New-Service -Name $serviceName -BinaryPathName "$pythonExecutable $scriptPath" -DisplayName $displayName -Description $description
        Write-Output "Service installed."
    }
    "start" {
        # Start the service
        Start-Service -Name $serviceName
        Write-Output "Service started."
    }
    "stop" {
        # Stop the service
        Stop-Service -Name $serviceName
        Write-Output "Service stopped."
    }
    "delete" {
        # Delete the service
        sc.exe delete $serviceName
        Write-Output "Service deleted."
    }

    "restart" {
        Stop-Service -Name $serviceName
        Start-Service -Name $serviceName
        Write-Output "Service updated."
    }

    "reinstall" {
        sc.exe delete $serviceName
        New-Service -Name $serviceName -BinaryPathName "$pythonExecutable $scriptPath" -DisplayName $displayName -Description $description
        Write-Output "Service re-installed."
    }

    default {
        Write-Output "Invalid command."
    }
}


如何在后台启动Python代码作为服务?如果还有更好的办法,谢谢指教

isr3a4wc

isr3a4wc1#

你必须将Python与作为后台服务运行它的操作系统分开。正如您所注意到的,每个操作系统都以自己的方式完成它,因此例如,与Linux及其systemd相比,Windows对其运行的应用程序具有不同的期望。
正确的方法是将代码库分成两部分:第一个将满足操作系统的要求,并处理它期望遵循的协议(这就是您面临的超时的来源:协议被违反,超时是OS如何响应)。另一个第二部分是执行工作的部分-启动后台Thread并执行您希望脚本执行的任何操作(请注意,它将在具有不同权限和访问权限的不同用户下启动,例如,您必须在触摸某些文件时考虑到它)。
P.S.处理它提供的WindowsServices子系统并不是真的很容易。如果你真的需要实施和支持它,请三思。

相关问题