通过shell脚本检查Marklogic连接

时间:2014-08-07 10:31:14

标签: shell marklogic

我需要一个检查Marklogic连接状态的shell脚本。我会将连接uri传递给脚本,脚本会检查连接是否正常。这是怎么回事?

3 个答案:

答案 0 :(得分:1)

在V7中,xcc和app服务器的URL不兼容。 XCC使用xcc://user:name@host:port 应用服务器使用http://host:port

xcc方案不会被纯HTTP客户端识别,也不会被marklogic的应用服务器识别。

首先 - 你需要定义“运行”对你意味着什么。 在V7中有一个新的'HealthCheck'应用程序,主要用于AWS,但有副作用是作为MarkLogic上的内置应用程序,如果marklogic服务器是两者,可以通过HTTP访问get并返回“200 OK”运行和“健康”...您可以更改它的确定方式,“健康”的定义是服务器已完全安装并且可以访问安全数据库。

HealthCheck应用程序在端口7997上运行...所以任何程序都可以进行

http://server:7997

可以检查是否返回“200 OK”

但是为了改进答案,“连接”是什么意思......“连接”的标准定义不能通过URL发送到不相关的程序,因为“连接”是当前活动的HTTP(TCP / IP)连接 - 不映射到URL ...它是当前正在运行的程序的属性。

但如果您的意思是“服务器是否处于活动状态”,则上述建议应该有效。 如果您的意思是“这个特定的marklogic应用程序是否正常运行”,那么您需要创建一个“状态”或“健康检查”或重用一个,但它不应该有副作用。您不希望重新连接检查重新使用“删除所有文档”端点。

答案 1 :(得分:1)

MarkLogic 6.x或更小

这是我使用的功能。如果它返回HTTP 20X(200),一切正常。 否则服务器有问题。

function PingMarkLogic($server)
{
    $uri = "http://$($server):8001/cluster-status.xqy"
    $adminCredential = new-object -typename System.Management.Automation.PSCredential -argumentlist "admin", $(ConvertTo-SecureString "admin" -Force -AsPlainText)
    try
    {
        $resp1 = Invoke-WebRequest -Uri $Uri -Method "GET" -Credential $adminCredential -ContentType "application/x-www-form-urlencoded" -ErrorAction SilentlyContinue
        return $resp1.StatusCode
    }
    catch [System.Net.WebException] 
    {
        return $resp1.StatusCode
    }

}

如果要检测它是否已安装但未配置(例如等待输入许可证),请将-MaximumRedirection 0添加到Invoke-WebRequest并查找HTTP 302响应,因为对http://server:8001/cluster-status.xqy的请求将被重定向给出302并且重定向将返回HTTP 200

MarkLogic 7.x或更高版本

在端口7997中有一个名为HealthCheck的新默认AppServer。它的优点是不需要凭据。更多信息here

这个功能更容易

function PingMarkLogic($server)
{
    $uri = "http://$($server):7997"
    try
    {
        $resp1 = Invoke-WebRequest -Uri $Uri -Method "GET" -ContentType "application/x-www-form-urlencoded" -ErrorAction SilentlyContinue
        return $resp1.StatusCode
    }
    catch [System.Net.WebException] 
    {
        return $resp1.StatusCode
    }

}

答案 2 :(得分:0)

您想知道MarkLogic服务是否正在运行,或MarkLogic中的特定应用服务器是否正在运行?我想我会向其中一个MarkLogic端口发送HTTP请求。如果这回应,它还活着......

HTH!