【问题标题】:How to use Consul Watches on an agent running on Windows?如何在 Windows 上运行的代理上使用 Consul Watch?
【发布时间】:2017-02-20 20:35:16
【问题描述】:

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

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

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

  • 我做错了什么?

还有一个额外的问题是:我可以以编程方式执行此操作吗?例如,在服务注册时。

谢谢。

【问题讨论】:

  • 嗨@DavidBrabant。我已经做好了检查(其中一张看起来一模一样)。我需要的是那个人(vividcortex.com/blog/2015/05/22/…)引用的文章。在那篇文章中,有一个手表正在做与我想要的类似的事情(尽管它在 bash 脚本中),但我不知道如何或在哪里设置手表。谢谢

标签: c# windows powershell watch consul


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    要结合 Marks 答案:

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

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

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

    对于 1.0 以上的 consul 版本,我用的是:

    {
      "watches": 
      [
        {
            "type": "checks",
            "handler_type": "script",
            "args": ["cmd", "/c", "powershell -ExecutionPolicy ByPass -NoProfile -File C:\\Workspace\\consul\\handler_script.ps1"]
        }
      ]
    }
    

    注意:-type=checks改为-type=service,同时转义绝对路径,即C:\\handler_script.ps1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多