0

我正在使用 Consul Template V0.19.0 for windows来渲染 nginx 负载平衡配置。它按预期工作。

现在我想要 consul 模板,在带有 args(-s reload)的文件夹中执行 nginx exe,如下所示:-

情况1:

template {
source = "Template/template.ctmpl"
destination = "F:\\IDE\\Visual Studio Collection\\Web Servers\\nginx-
1.12.0\\nginx-1.12.0\\conf\\nginx.conf"
command = "F:\\IDE\\Visual Studio Collection\\Web Servers\\nginx-
1.12.0\\nginx-1.12.0\\nginx -s reload"
command_timeout = "60s"
}

但它会引发错误,例如“无法从“Template/template.ctmpl”执行命令“F:\IDE\Visual Studio Collection\Web Servers\nginx-1.12.0\nginx-1.12.0\nginx.exe”=> "F:\IDE\Visual Studio Collection\Web Servers\nginx-1.12.0\nginx-1.12.0\conf\nginx.conf": child: exec: "F:IDEVisual": 文件不存在"。

案例2:- 目前我通过将nginx作为服务(使用nssm)实现了这一点,并给出了类似的命令,

command = "powershell restart-service nginx" 

而不是给出完整路径,然后是“-s reload”。

但为此,必须使用 nssm 等应用程序将 nginx 作为服务。

我可以知道,有没有办法告诉领事模板配置中的命令属性,“像案例1一样执行文件夹中的nginx exe ”?

谢谢。

4

1 回答 1

0

尝试这个

template {
source = "Template/template.ctmpl"
destination = "F:\\IDE\\Visual Studio Collection\\Web Servers\\nginx-
1.12.0\\nginx-1.12.0\\conf\\nginx.conf"
command = "\"F:\\IDE\\Visual Studio Collection\\Web Servers\\nginx-
1.12.0\\nginx-1.12.0\\nginx\" -s reload"
command_timeout = "60s"
}

如果这不起作用,请尝试以下选项以获取命令

command = "\"F:/IDE/Visual Studio Collection/Web Servers/nginx-
1.12.0/nginx-1.12.0/nginx\" -s reload"

或者

command = "\"F:\\\\IDE\\\\Visual Studio Collection\\\\Web Servers\\\\nginx-
1.12.0\\\\nginx-1.12.0\\\\nginx\" -s reload"

编辑-1

因此,根据讨论,您的 nginx 配置似乎有一个基于相对文件夹的配置。当 nginx 从一个文件夹启动时,它也需要从同一个文件夹重新加载。所以需要改到文件夹,然后执行reload命令。您应该尝试的两种格式是

command="cd '<NGINX FOLDER PATH>' && nginx -s reload"

或者

command="cmd /k 'cd \'<NGINX FOLDER PATH>\' && nginx -s reload'"
于 2017-08-15T06:17:23.217 回答