我有一台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由于连接被拒绝而失败。