首页 > 解决方案 > 使用 q 脚本检查服务器上的端口状态

问题描述

我编写了一个小脚本来使用 q 检查端口状态。它检查端口并在连接被拒绝时运行电子邮件,这很好。然后我为一个端口使用了一个可选的超时,这样它就不会挂在那里等待。尽管如果端口超时,它会返回注释“超时”,但它似乎也将我踢出了函数并且没有进入 sendemail[] 部分。

ProcessChecks:{[port]
            V:{@[value;("hopen (`::",(string x),";5000)");enlist]} [port];
            .keh.V:V;               :
            mail_body:(string V)," at .z.T time: ",(string .z.T);
            .keh.mail:mail_body;

  $[-6h=type V;"port accepted";SendEmail2[mail_body;"connection refused port: ",(string port)]];

名称空间.keh.mail不会改变并且 SendEmail2[] 不会被发送,这只是一个 unixmailx命令。

我会得到.keh.V = "timeout"

    .keh.mail = " at .z.T time whatever the time is"

5000 是 5 秒的等待时间,它的引入导致了问题。

标签: kdb

解决方案


您的问题是由:脚本第三行中的杂散引起的。这导致您的函数提前返回。尝试以下操作:

ProcessChecks:{[port]
  V:{@[value;("hopen (`::",(string x),";5000)");enlist]} [port];
  .keh.V:V;
  mail_body:(string V)," at .z.T time: ",(string .z.T);
  .keh.mail:mail_body;
  $[-6h=type V;"port accepted";SendEmail2[mail_body;"connection refused port: ",(string port)]];
  }

推荐阅读