Consul Windows 服务不再以错误 "Incorrect function" 开始

Consul Windows Service no longer starts with error "Incorrect function"

所以有一次我在 Windows 7 上有领事 运行。那是几个月前的事了。最近我开始回顾 consul,所以我使用找到的 Chocolatey 包安装了它 here on the Chocolatey website.

首先,程序包在尝试启动服务时总是会抛出错误。错误:

c o n s u l :   U n e x p e c t e d   s t a t u s   S E R V I C E _ S T O P P E D   i n   r e s p o n s e   t o   S T A R T   c o n t r o l .

但这并不能使 Chocolatey 认为软件包安装失败。之后,我尝试使用 nssm 转储服务,结果如下:

C:\ProgramData\chocolatey PS>nssm dump consul
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe install consul C:\ProgramData\chocolatey\lib\consul\tools\consul.exe
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppParameters "agent -ui -config-dir=C:\ProgramData\consul\config -data-dir=C:\ProgramData\consul\data -bind '127.0.0.1' -bootstrap -server"
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppDirectory C:\ProgramData\chocolatey\lib\consul\tools
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppExit Default Exit
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppEnvironmentExtra :GOMAXPROCS=2
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppStdout C:\ProgramData\consul\logs\consul-output.log
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppStderr C:\ProgramData\consul\logs\consul-error.log
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppRotateFiles 1
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppRotateOnline 1
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul AppRotateBytes 10485760
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul DisplayName consul
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul ObjectName "NT Authority\NetworkService"
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul Start SERVICE_AUTO_START
C:\ProgramData\chocolatey\lib\NSSM\tools\nssm.exe set consul Type SERVICE_WIN32_OWN_PROCESS

如果我将上面的 AppParameters 粘贴到 consul 之后,它会完美运行。所以,我不知道为什么我无法启动该服务。

C:\ProgramData\chocolatey PS>start-service consul
start-service : Service 'consul (consul)' cannot be started due to the following error: Cannot start service consul on computer '.'.
At line:1 char:1
+ start-service consul
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException
    + FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand

当我查看事件查看器时,它告诉我这个错误消息:

The consul service terminated with the following service-specific error: 
Incorrect function.

有没有人最近在 Windows 上安装了 consul Chocolatey 软件包?这有可能是 Windows 错误、NSSM 错误,甚至是 consul 错误吗? 我尝试了不同版本的 NSSM 和不同版本的 consul,结果相同。如果我能在 Windows 上获得领事 运行 的任何帮助,我们将不胜感激。

为了防止其他人 运行 遇到这个问题,我有几个问题需要解决才能启动服务。

首先,我有多个私有 IP 地址,当我使用 Chocolatey 安装包时,我需要使用带有 choco install 命令的 --params 选项或通过指定来指定 IP 地址它通过领事配置文件。我在上面做了这个,但由于这个原因,我一开始浪费了很多时间。另外,在指定要绑定的IP地址时,还需要指明需要consul to 运行 in server mode。因此,在某些情况下,仅下载软件包并尝试 运行 consul 是行不通的。此外,= 符号在使用 consul 指定参数时非常重要。有时您可以只添加 space 并且不使用引号,但我建议您始终使用 = 指定参数。我在本地 Windows 7 机器上用来 运行ning 的最后一个命令是:

cinst consul --yes --force --params='"-server -bootstrap -bind=""127.0.0.1"" "'

在故障排除过程中,我在这里遗漏了几件事。

  1. 如果您已经安装了 consul,请确保服务已停止并确保没有 consul 进程 运行ning,然后再尝试使用 Chocolatey 重新安装 consul。为了确保,运行 PowerShell 中的这个:

Stop-Service consul; Get-Process consul -ErrorAction SilentlyIgnore | Stop-Process -Force

  1. 如果服务无法启动,请查看 Chocolatey 包放置日志文件的位置。对我来说,它在 C:\ProgramData\consul\logs\consul-error.log.

  2. 我没有先了解NSSM。它确实是一个很棒的工具,可以让您轻松调试服务无法启动的原因。如果你想在控制台中调整 consul 的启动参数 运行:

nssm edit consul