我使用非吸吮服务管理器(NSSM)为python脚本创建了窗口服务。如果我必须对python .Do做一些更改,我只需要在NSSM启动的指定路径上替换更新过的python,还是也需要更新服务?如果服务需要更新,我如何才能做到?
发布于 2022-01-13 11:22:31
我删除并重新创建服务(作为localadmin):
sc.exe stop <servicename>
sc.exe delete <servicename>您还可以使用nssm.exe:
nssm.exe stop <servicename>
nssm.exe remove <servicename>随函附上一个powershell脚本,用于将python脚本设置为服务,您必须以localadmin的形式运行它:
<#
.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"下面是运行脚本的输出:
.\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,董事会在那里,它会自动启动:-)
https://stackoverflow.com/questions/69674615
复制相似问题