1

所以有一次我在 Windows 7 上运行了 consul。这是几个月前的事了。最近我开始回顾 consul,所以我使用Chocolatey 网站上的Chocolatey 包安装了它。

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

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.

有没有人让 consul Chocolatey 包最近在 Windows 上工作?有没有可能这是一个 Windows 错误,或者一个 NSSM 错误,甚至是一个领事错误?我尝试了不同版本的 NSSM 和不同版本的 consul,结果相同。我能得到任何帮助来让领事在 Windows 上运行将不胜感激。

4

1 回答 1

3

以防万一其他人遇到此问题,我需要解决几个问题才能启动服务。

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

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

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

  1. 如果您已经安装了 consul,请确保服务已停止并确保在尝试使用 Chocolatey 重新安装 consul 之前没有运行任何 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

于 2018-04-26T13:03:25.520 回答