Запустите сервер node.js с помощью subprocess.Popen () - PullRequest
0 голосов
/ 25 июня 2018

У меня есть сервер node.js (здесь сокращенно). Конечная точка /healthcheck регулярно проверяется

        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 из-за отказа в соединении.

...