小编Nat*_*raj的帖子

如何以编程方式监视docker容器是否已退出?

我在VM Host上运行多个命名的docker容器(200+).我有一个管理器脚本/代码,应该从主机管理容器.我想知道是否有任何基于事件的机制在容器停止/失败时得到通知.这样我就可以重新启动已停止的容器.

我能想到的一个解决方案是定期进行船坞检查,查看State.PidState.Running确认状态.

但是,如果在容器发生故障时通知pid/name通知管理器,而不是定期轮询,则可以更好地重新启动特定容器.

总的来说,有没有办法以编程方式监视来自不是父进程的不同进程的进程状态?

lxc docker

8
推荐指数
1
解决办法
2894
查看次数

c - 如何在多线程环境中处理SIGPIPE?

我有一个用C编写的多线程SSL服务器,其行为如下:

  • 主线程等待客户端请求(epoll),接受它们并为每个客户端套接字生成一个分离的线程
  • 每个线程SSL_accept分开执行.成功进行SSL握手后,线程会从客户端接收消息并回复每条消息SSL_read.
  • 客户端关闭套接字或发生任何错误时,客户端线程退出

我尝试模拟并发客户端连接来测试服务器.

在一次这样的模拟中,我的服务器退出了SIGPIPE信号.

有没有办法SIGPIPE在线程级别捕获和处理?我希望相应的线程处理信号而不是整个进程退出.

最初我尝试过signal(SIGPIPE,SIG_IGN),但是信号(2)男人说:

signal()在多线程进程中的影响未指定.

可以signalfd被用来处理这些SIGPIPEs?还是有其他解决方案吗?

注意:服务器在Ubuntu 12.04上运行,我不能使用MSG_NOSIGNAL,send因为我直接使用OpenSSL作为库(没有源代码)

提前致谢.

c linux multithreading signals

4
推荐指数
1
解决办法
2932
查看次数

从用户数据重新启动ecs-agent

我将EBS安装到AWS中支持ecs的实例.

为了使Docker可以看到EBS,必须重新启动docker守护程序.我在用户数据中添加了适当的命令.但我无法从用户数据重新启动ecs-agent docker容器.

以下是我的用户数据:

#!/bin/bash
echo ECS_CLUSTER=MYCLUSTER>> /etc/ecs/ecs.config
mkfs -t ext4 /dev/sdb
mkdir /db/
mount /dev/sdb /db/
service docker stop
service docker start 
docker start ecs-agent
Run Code Online (Sandbox Code Playgroud)

在SSH上,我可以看到ecs-agent容器已创建,但它没有运行.当我手动启动容器时,它正在工作.在实例启动期间启动它的正确方法是什么?我的用户数据脚本中缺少什么?

我需要创建一个启动配置,以便在我的自动缩放组中使用.实例应启用EBS并且对Docker可见.

amazon-ec2 amazon-ebs amazon-web-services amazon-ecs docker

0
推荐指数
1
解决办法
4647
查看次数