意外状态SERVICE_START_PENDING响应START控制

时间:2015-01-27 13:42:33

标签: windows-services nssm

尝试通过nssm重新启动现有的Windows服务时,我会随机获取以下消息,该消息将写入错误日志/错误输出。关于如何纠正的任何想法?理想情况下,接受作为有效的回应。

  

响应START控制的意外状态SERVICE_START_PENDING

4 个答案:

答案 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)

最近发生在我身上......不仅我无法重新启动服务,而且也不可能停止它。

让我们杀死它。

  1. 识别进程 ID (PID)。将 [SERVICE-NAME] 替换为您的服务名称。
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              :
  1. 手动终止进程。将 [PID] 替换为上一步中的值。
taskkill /pid [PID] /f

这个错误也与

有关 <块引用>

Windows 无法停止本地计算机上的 [SERVICE-NAME] 服务。
错误 1053:服务没有响应启动或控制 及时请求。