节点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添加显式错误侦听器,它是固定的。
- 如何访问OpsWorks ECS层中的私有Docker存储库?
- 我应该如何将敏感环境variables传递给Amazon ECS任务?
- 如何使用docker-compose.yml和ecs-cli将EBS卷附加到我的容器中
- 运行在Docker容器中的Node.js进程在内存不足时不会退出或抛出
- 启动Docker容器的ECS Agent未完成。 手动启动成功
- Docker镜像环境variables的依赖关系
- 用EBS部署多容器docker环境(flask&nginx)
- AWS ECS和Docker:不能通过tcp:// <MY-ID> .dkr.ecr.us-east-1.amazonaws.com:2375 / <PROJECT>连接到Docker守护进程。
- 如何在ECS Docker中创build成功应用程序部署的通知?