【问题标题】:Testing if kdb is accepting connections from bash测试 kdb 是否接受来自 bash 的连接
【发布时间】:2018-03-14 02:29:09
【问题描述】:

这是我的 kbd 脚本。 它确实依赖于丰富的环境文件。我的脚本无法连接到 KDB 数据库,因为它太忙而无法接受连接。 我想在运行脚本之前测试与 kdb 的连接。我只想知道 kdb 是否正在接受连接并使其等于 bash 退出值。 0 或 1
这是我的 KDB 脚本:

system "l ",(getenv`CASPER),"/CASPER/q/CASPER_lib.q";
system "l ",(getenv`CASPER),"/CASPER/q/report_lib.q";
system "l ",(getenv`CASPER),"/reporting/q/reporting_utils.q";
\c 50 2000
\P 0

\p 0W
port:system"p"
3 (string port),"\n"
hclose 3

params:.Q.def [(`tradedate`CASPERhost)!(.z.d;`)] .Q.opt .z.x;
tradedate:params`tradedate;
CASPERhost:string params`CASPERhost;

h:.U.connect[`kdb;CASPERhost;"";()];
h1:.U.connect[`kdb;getenv`QUERY_GATEWAY;"";()];    


hclose h;
hclose h1;

我要做的就是测试与 kdb 的连接 - 从 bash 脚本。打开关闭,就是看看能不能连接数据库 但是,当我运行 bash 时,它会进入 q 提示符。我必须用 \ (两个斜杠)手动关闭。我如何测试 kdb 数据库是否接受来自 bash 脚本的连接。

这是我的 bash 脚本

#!/bin/bash
q kdb_filehandle.q

【问题讨论】:

    标签: bash kdb


    【解决方案1】:

    您可以使用 q 中的 exit 命令以退出代码终止;

    q)exit 1
    $ echo $?
    1
    
    q) exit 0
    $ echo $?
    0
    

    考虑到这一点,您可以错误捕获您的连接并让它们在失败时以 1 退出/例如,如果您想捕获您的希望,您会使用

    .[.U.connect;(`kdb;CASPERhost;"";());exit 1]
    

    这里。是陷阱操作符,.U.connect 是你的函数,你的参数作为 list () 传入,第三个参数是错误时执行的语句,在本例中为 exit 1。

    http://code.kx.com/q/ref/errors/#trap

    您还可以将 q 脚本作为 shebang 执行,以避免将脚本包装在 bash 中。只需使用以下命令开始您的脚本;

    #!/usr/bin/env q
    

    http://code.kx.com/q/cookbook/faq/#can-i-execute-q-as-a-shebang-script

    【讨论】:

      猜你喜欢
      • 2016-09-13
      • 2018-12-11
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      相关资源
      最近更新 更多