首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新NSSM中的Python窗口服务

更新NSSM中的Python窗口服务
EN

Stack Overflow用户
提问于 2021-10-22 09:37:06
回答 1查看 358关注 0票数 1

我使用非吸吮服务管理器(NSSM)为python脚本创建了窗口服务。如果我必须对python .Do做一些更改,我只需要在NSSM启动的指定路径上替换更新过的python,还是也需要更新服务?如果服务需要更新,我如何才能做到?

EN

回答 1

Stack Overflow用户

发布于 2022-01-13 11:22:31

我删除并重新创建服务(作为localadmin):

代码语言:javascript
复制
sc.exe stop <servicename>
sc.exe delete <servicename>

您还可以使用nssm.exe:

代码语言:javascript
复制
nssm.exe stop <servicename>
nssm.exe remove <servicename>

随函附上一个powershell脚本,用于将python脚本设置为服务,您必须以localadmin的形式运行它:

代码语言:javascript
复制
    <#
    .SYNOPSIS
        Installing a python script as a service under windows
    .DESCRIPTION
        install a recent python https://www.python.org/ftp/python/3.10.1/python-3.10.1-amd64.exe
        add python to system path
        add a python venv to use (python.exe -m venv <directory to install vens on aka c:\\python\\venvs>)
        set $appexe (must have full path to the venv version), $name and $port
        You also need nssm.exe in the current directory see https://nssm.cc/download and https://nssm.cc/usage
    #>
    $pythonexe = "c:\\dist\\venvs\\gitlab-mobj-board\\Scripts\\python"
    $appexe = (Get-Command .\main.py).Source
    $name = "GitlabBoard"
    $pwd = (pwd).Path
    $port = 8000
    $ip = '0.0.0.0'
    write-host "pythonexe:$pythonexe"
    write-host "appexe:$appexe"
    write-host "name:$name"
    write-host "ip:$ip - port:$port"
    write-host "pwd:$pwd"
    $nssmexe = (Get-Command .\nssm.exe).Path
    $command = '"$nssmexe" install "$name" "$pythonexe" "$appexe" --ip=$ip --port=$port'
    iex "& $command"
    $command = '"$nssmexe" set "$name" AppDirectory "$pwd"'
    iex "& $command"
    $command = '"$nssmexe" set "$name" Start SERVICE_AUTO_START'
    iex "& $command"

    write-host "#start service: sc.exe start $name or Start-Service $name"
    write-host "#stop service: sc.exe stop $name or Stop-Service $name"
    write-host "#delete service: sc.exe delete $name"

下面是运行脚本的输出:

代码语言:javascript
复制
.\create-service.ps1
pythonexe:c:\\dist\\venvs\\gitlab-mobj-board\\Scripts\\python
appexe:C:\dist\work\gitlab-mobj-board\main.py
name:GitlabBoard
ip:0.0.0.0 - port:8000
pwd:C:\dist\work\gitlab-mobj-board
Service "GitlabBoard" installed successfully!
Set parameter "AppDirectory" for service "GitlabBoard".
Set parameter "Start" for service "GitlabBoard".
#start service: sc.exe start GitlabBoard or Start-Service GitlabBoard
#stop service: sc.exe stop GitlabBoard or Stop-Service GitlabBoard
#delete service: sc.exe delete GitlabBoard


.\nssm.exe dump gitlabboard
C:\dist\work\gitlab-mobj-board\nssm.exe install GitlabBoard c:\\dist\\venvs\\gitlab-mobj-board\\Scripts\\python
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard AppParameters "C:\dist\work\gitlab-mobj-board\main.py --ip=0.0.0.0 --port=8000"
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard AppDirectory C:\dist\work\gitlab-mobj-board
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard AppExit Default Restart
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard DisplayName GitlabBoard
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard ObjectName LocalSystem
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard Start SERVICE_AUTO_START
C:\dist\work\gitlab-mobj-board\nssm.exe set GitlabBoard Type SERVICE_WIN32_OWN_PROCESS


sc.exe query gitlabboard

SERVICE_NAME: gitlabboard
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

sc.exe start gitlabboard

SERVICE_NAME: gitlabboard
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 21304
        FLAGS

然后我可以去http://localhost:8000,董事会在那里,它会自动启动:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69674615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档