首页 > 解决方案 > 当我使用 Python 在容器内运行命令时,进程永远不会结束

问题描述

使用python脚本我通过docker容器内的命令运行logstash,正常行为(在服务器中安装了logstash)是管道获取数据后管道关闭,但该过程永远不会结束。

logstash=subprocess.call(["docker","exec", "-it", "logstash-docker_logstash_1", "/usr/share/logstash/bin/logstash","-f", "/usr/share/logstash/pipeline/site-canvas.conf","--path.data","/usr/share/logstash/config/min-data/"])

我使用 docker top 查看容器内正在运行的进程

我该怎么做才能确保在完成获取数据后流程结束?

这是我的管道

input {
    jdbc {
        jdbc_driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        jdbc_connection_string => "jdbc:sqlserver:/db-ip:1433;databasename=omi"
        jdbc_user => "my-user"
        jdbc_password => "my-pass"

        statement => "SELECT
                    TIME_CREATED,DESCRIPTION as problem, SEVERITY as severity_mame, NODEHINTS_DNSNAME as source,CATEGORY
                    FROM [omi1062event].[dbo].[ALL_EVENTS]
                    WHERE  STATE = 'OPEN'
                    AND NODEHINTS_DNSNAME LIKE 'mju%'
                    AND TIME_CREATED >= DATEADD(day, -1, GETDATE())
                    ORDER BY TIME_CREATED ASC
                    "
        jdbc_default_timezone => "UTC"
    }
}

filter {
        date {
            match => [ "time_created", "ISO8601", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'","yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm:ss.SSSSSS" ]
            timezone => "Chile/Continental"
        }
}
output {
    elasticsearch {
        hosts => "my-ip:9200"
        index => "canvas"
        user => "my-user"
        password => "my-pass"
    }
}

标签: python-3.xdockersubprocesslogstash

解决方案


推荐阅读