当试图通过NSSM
重新启动现有的windows服务时,我随机获得以下消息,该消息被写入错误日志/错误输出。对如何纠正有什么想法吗?理想情况下,接受为有效的响应。
响应于启动控件的意外状态SERVICE_START_PENDING
发布于 2020-04-09 13:23:50
如果服务启动时间太长,您将得到"SERVICE_START_PENDING“(这意味着该服务还没有告诉Windows它已经启动)。“太长”取决于发出开始请求的应用程序。在NSSM的情况下,这似乎非常短,因此如果您的系统处于加载状态,则服务启动所需的时间比NSSM预期的要长。
似乎没有办法告诉NSSM启动或停止操作需要多长时间。对于停止请求,它甚至忽略自己的关闭超时设置。那么,使用NSSM的选项是从源代码编译并添加一个超时值选项。否则使用另一种工具,例如net:
net stop <service>
net start <service>
发布于 2018-12-21 12:27:54
我相信这个问题是由服务本身引起的。
很可能该服务有错误和挂起、失败或花费太多时间才能正确停止。当你试图启动它的时候就会产生问题。
如果服务失败:在我看来,通过在服务属性中设置服务恢复选项,有一个潜在的解决办法。然后在服务失败时选择“运行程序”。然后编写一个批处理来获取该服务的PID并将其关闭,然后使用NSSM再次启动它。
在此批处理中,您可以使用"SC查询“命令检查服务状态:
C:\Windows>sc query "MyService" | find "STATE"
STATE : 3 STOP_PENDING
请注意,如果只使用NSSM隐藏窗口,则可能只使用任务调度程序实现相同的目标。
在任务属性的“常规”选项卡中。如果您选择“运行用户是否登录”,这将从会话0运行,这将不会向您显示任何窗口。
那么,您在计划的任务上需要做的是,像现在一样杀死/重新启动目标进程本身。--这将更加有力地工作.
如果该服务不是正式的windows服务,而是更多的EXE程序文件(请在您的一侧开发),则转换为使用NSSM的服务的可能性很大。最好将程序重写/重新编译为实际的Windows服务。
发布于 2021-03-17 23:12:54
问题是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://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-service
https://stackoverflow.com/questions/28171924
复制相似问题