如何在Windows上运行的代理上使用Consul Watches?

时间:2017-02-20 20:35:16

标签: c# windows powershell watch consul

我在多台计算机(代理)中运行一系列API(服务),并且这些服务具有某种运行状况检查。我想实现一个每次服务状态发生变化时都会触发通知的手表。 阅读Consul文档后,它应该是这样的:

consul watch -type=checks -service=myservice handler_script.ps1

我的问题在于处理程序。我编写了一个小型PowerShell脚本,每次发生更改时都会向脚本输出JSON。但是当我运行脚本时,会打开一个带有PowerShell脚本内容的记事本窗口。 我的问题是:

  • 我做错了什么?

作为奖励问题:我可以通过编程方式执行此操作吗?例如,在服务注册时。

感谢。

2 个答案:

答案 0 :(得分:1)

我的猜测是,consul不知道如何运行.ps1文件。请改为cmd /c powershell.exe handler_script.ps1

答案 1 :(得分:0)

与Marks回答:

# add `/webapp` to the backend:
location / {
    proxy_pass    http://localhost:8080/webapp$request_uri;
}

如果您尝试使用配置文件,对于1.0之前的consul版本,我使用了:

consul watch -type=service -service=myservice "cmd /c powershell.exe -ExecutionPolicy ByPass -NoProilfe -File C:\\Workspace\\consul\\handler_script.ps1"

对于1.0以上的领事版本,我使用了:

{
  "watches": 
  [
    {
        "type": "service",
        "service": "myservice",
        "handler": "cmd /c powershell.exe -ExecutionPolicy ByPass -NoProilfe -File C:\\Workspace\\consul\\handler_script.ps1"
    }
  ]
}

注意:{ "watches": [ { "type": "checks", "handler_type": "script", "args": ["cmd", "/c", "powershell -ExecutionPolicy ByPass -NoProfile -File C:\\Workspace\\consul\\handler_script.ps1"] } ] } 更改为-type=checks,也可以转义绝对路径,即-type=service