节点ECS任务不崩溃

节点ECS任务不崩溃

我有一个运行Node:Boron(v6.9.0)的ECS工作者。
我偶尔会得到一个未被捕获的exception。
例如:

{ "date": "Mon Jul 03 2017 09:09:29 GMT+0000 (UTC)", "process": { "pid": 28, "uid": 0, "gid": 0, "cwd": "/usr/src/app", "execPath": "/usr/local/bin/node", "version": "v6.11.0", "argv": [ "/usr/local/bin/node", "/usr/src/app/src/poll.js" ], "memoryUsage": { "rss": 67502080, "heapTotal": 33660928, "heapUsed": 25145608, "external": 8981275 } }, { "os": { "loadavg": [ 0.65869140625, 0.44921875, 0.4541015625 ], "uptime": 218908 }, "trace": [ { "column": null, "file": null, "function": "Error", "line": null, "method": null, "native": true } ], "stack": [ "Error: ENOENT: no such file or directory, open 'FILE.EXE'", " at Error (native)" ], "level": "error", "message": "uncaughtException: ENOENT: no such file or directory, open 'FILE.EXE'", "message": "uncaughtException: ENOENT: no such file or directory, open 'FILE.EXE'", "timestamp": "2017-07-03T09:09:29.645Z" } 

我期望发生的是应用程序崩溃,重新启动,稍后再试。 如果不能处理x次,则进入死信队列。

问题是,它只是挂起,当我看着ECS的任务,它说“跑”。

所以,它不会重新启动,因为它不会崩溃。

是否有任何configuration我需要做一个Node Docker应用程序崩溃未捕获的exception?

把这个放在你的脚本中:

 process.on('uncaughtException', function (err) { process.exit(1) }) 

这是失败的一段代码:

 try { const file = fs.ReadStream(filepath); file.on('data', (d) => { task(); }).on('end' () => { task(); } } catch (e) { logger.FATAL(err, {backtrace: err.stack}, () => process.exit(1)); } 

感谢@AndyShinn,我添加了一个错误事件的监听器:

 .on('error', () => process.exit(1)) 

现在所有的作品。

因此,通过为可读stream添加显式错误侦听器,它是固定的。