kdb - 使用 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 秒的等待时间,它的引入导致了问题。
解决方案
您的问题是由:
脚本第三行中的杂散引起的。这导致您的函数提前返回。尝试以下操作:
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)]];
}
推荐阅读
- php - For 循环的最后一次迭代,带有 If 条件和树枝
- android - Picasso 不会从 API 28 中的 HTTP 链接加载图像
- hive - 配置单元管理的表记录计数结果未显示
- javascript - 如何在Javascript中的For循环中添加字符串
- swift - 用于 iOS 和 MacOS 目标的具有共享 CoreData 的 Xcode 项目
- visual-studio-code - Visual Studio Code - 搜索触发具有高 CPU 使用率的 Windows Defender 进程
- android - Android gradle 库“无法解决”
- sql-server - Management Studio 2016 在对象资源管理器中没有数据库图
- reactjs - shopify 北极星汉堡菜单
- ios - UICollectionViewCell 中归档的可编辑文本阻止调用 didSelectItemAt