使用q脚本检查服务器上的端口状态

时间:2019-05-29 13:27:59

标签: kdb

我写了一个小脚本来使用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 []也不会发送,这只是unix mailx命令。

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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)]];
  }