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