尝试通过nssm
重新启动现有的Windows服务时,我会随机获取以下消息,该消息将写入错误日志/错误输出。关于如何纠正的任何想法?理想情况下,接受作为有效的回应。
响应START控制的意外状态SERVICE_START_PENDING
答案 0 :(得分:1)
我认为此问题是由服务本身引起的。
该服务很可能出现bug并挂起,失败或花费太多时间才能正常停止。尝试启动时会出现哪个问题。
如果服务失败: 我认为,可以通过在服务属性中设置服务恢复选项来解决问题。然后在服务失败时选择“运行程序”。 然后对一批代码进行编码,以获取该服务的PID并杀死它,然后使用NSSM重新启动它。
在此批次中,您可以使用“ SC查询”命令检查服务状态:
C:\Windows>sc query "MyService" | find "STATE"
STATE : 3 STOP_PENDING
请注意,如果仅使用NSSM隐藏窗口,则仅使用任务计划程序可以实现相同的目标。
在任务属性的“常规”选项卡中。如果选择“无论用户是否登录都运行”,它将从会话0运行,该会话不会向您显示任何窗口。
那么您需要执行的计划任务是,像现在一样杀死/重新启动目标进程本身。 这将更加强大。
如果该服务不是正式的Windows服务,而是更多的EXE程序文件(在您身边,则是dev),然后转换为具有NSSM的服务,则失败的可能性很高。 最好将程序重写/重新编译为实际的Windows服务。
答案 1 :(得分:0)
如果该服务启动所需的时间太长,则您将获得“ SERVICE_START_PENDING”(这意味着该服务尚未告知Windows尚未启动)。 “太长”取决于发出启动请求的应用程序。对于NSSM,这似乎很短,因此,如果系统处于负载状态,则该服务的启动时间将比NSSM预期的时间长。
似乎无法告诉NSSM启动或停止操作需要多长时间。对于停止请求,它甚至会忽略自己的关闭超时设置。然后,使用NSSM的选项是从源代码进行编译并添加超时选项。否则,请使用其他工具,例如净额:
net stop <service>
net start <service>
答案 2 :(得分:0)
问题是 NSSM 在等待您的服务启动时超时。不幸的是,似乎无法为 NSSM 提供自定义的服务启动超时时间跨度。
一种解决方法仍然是使用 NSSM 来安装服务,然后使用 PowerShell 来启动和停止服务。 PowerShell 允许您指定自己的等待超时(因为您可能不希望脚本无限期地等待)。
$serviceName = 'My service'
$service = Get-Service $serviceName -ErrorAction Ignore
Write-Verbose "Starting service '$serviceName'."
$service.Start()
$waitTimeout = New-TimeSpan -Seconds 5
$service.WaitForStatus([System.ServiceProcess.ServiceControllerStatus]::Running, $waitTimeout)
您可以在此处阅读有关 PowerShell Get-Service 命令的更多信息:https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-service
答案 3 :(得分:0)
最近发生在我身上......不仅我无法重新启动服务,而且也不可能停止它。
让我们杀死它。
sc queryex "[SERVICE-NAME]"
你应该得到这样的东西:
SERVICE_NAME: xxxxxxxxx
TYPE : 30 WIN32
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
PID : 4812
FLAGS :
taskkill /pid [PID] /f
这个错误也与
有关 <块引用>Windows 无法停止本地计算机上的 [SERVICE-NAME] 服务。
错误 1053:服务没有响应启动或控制
及时请求。