Запустите nginx exe в папке с аргументами -s reload Консул шаблон Windows
Я использую шаблон Consul V0.19.0 для Windows, для рендеринга конфигурации балансировки нагрузки nginx. Он работает как положено.
Теперь я хочу шаблон консула, чтобы выполнить nginx exe в папке с аргументами (-s reload), как показано ниже: -
Случай 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"
}
Но он выдает ошибку "не удалось выполнить команду"F:\IDE\Visual Studio Collection\Web Servers\nginx-1.12.0\nginx-1.12.0\nginx.exe"из"Template/template.ctmpl" => "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".
Но для этого нужно сделать nginx сервисом, использующим такие приложения, как nssm.
Могу ли я узнать, есть ли способ указать атрибуту команды в конфигурации шаблона консула "выполнить exe-файл nginx в папке, как в случае 1"?
Благодарю.
2 ответа
Попробуй это
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"
Edit-1
Исходя из обсуждения, кажется, что ваш конфиг nginx имеет относительную конфигурацию на основе папок. Когда nginx запускается из папки, его также необходимо перезагрузить из той же папки. Поэтому вам нужно перейти в папку и затем выполнить команду перезагрузки. Два формата, которые вы должны попробовать
command="cd '<NGINX FOLDER PATH>' && nginx -s reload"
или же
command="cmd /k 'cd \'<NGINX FOLDER PATH>\' && nginx -s reload'"
У меня такая же проблема: child: exec: «C: nginx»: файл не существует».
Ни одно решение выше других в сети не помогло.
Но я наконец нашел решение.
С использованиемchoco install nginx-service 1.24.0
(которые устанавливают nginx и nssm, я думаю, ручная установка может работать, но это более простой способ)
Шаблон с командой, запускающей bat, в которой находится сервис nginx
template {
source = "c:\\consul\\template.ctmpl"
destination = "C:\\tools\\nginx\\conf.d\\nginx-location.conf"
wait {
min = "2s"
max = "13s"
}
command = "C:\\consul\\test.bat"
command_timeout = "60s"
}
test.bat
powershell restart-service nginx-service
пс. все мое решение предназначено для адресации (обратного прокси-сервера) для отдельных контейнеров одной и той же задачи, которые находятся в кочевом кластере, подключенном к консулу. И теперь наконец-то работает.