使用subprocess.Popen()启动node.js服务器

时间:2018-06-25 04:07:06

标签: python node.js subprocess popen

我有一台node.js服务器(在此缩写)。 /healthcheck端点会定期ping

        var app = express();

        app.get('/healthcheck', function(req, res) {
            promiseTimeout(getPing(transId), TIMEOUT_IN_MILLIS)
            .then(() => {
                // success health
                logger.info("healthy");
                res.status(200).send()
            })
            .catch(() => {
            // broken health
                logger.info("unhealthy");
                res.status(500).send();
            })

        });

        app.use(function(req, res) {
            res.status(404).send("Sorry, that route doesn't exist.");
        });

        var server = app.listen(PORT, function () {
            logger.info("http server app listening on port %s", PORT);
        });

它由python脚本启动,在这里缩写

def handler():
        # Handle SIGTERM here    

def start_web_server():
        print "starting web server"
        # start web server
        proc = subprocess.call(["/usr/bin/nodejs", "/usr/src/app/http_server.js"], shell=False)

        return proc

def start():
        proc = start_web_server()

if __name__ == '__main__':
        signal.signal(signal.SIGTERM, handler)
        start()

现在proc = start_web_server()之后,我想做其他事情,例如验证端点。我知道的解决方案是使用subprocess.Popen()而不是subprocess.call()

但是,一旦执行此操作,/healthcheck端点将在一段时间后失败。看来call正在阻塞,因此服务器保持运行,但是Popen未阻塞,因此服务器已关闭。我的直觉是Popen不应自行关闭子流程。

这是什么原因?而我的问题(即在启动node.js服务器后做些什么)的解决方案是什么?

编辑1: / healthcheck由于连接被拒绝而失败。

0 个答案:

没有答案