不是最佳实践:容器内有多个进程需要简单管控的时候

有些时候,由于各种历史原因,某些应用的服务之间耦合度非常高,具体表现为各种crontab+脚本的管理模型,且每个脚本的功能已经随着历史的车轮滚滚风化。

当然,资源(主要是时间)和收益(主要是还有多少人用)受到制约的情况下,把所有服务塞到一个容器里未必是一个坏选择(至少下次迁移的时候可以省心很多),这个时候docker容器默认监控CMD命令的进程就是出现一点小问题,也许可以这样处理(笔者随手写的,没有找过是否有更好的方案):

init.sh

# 首先启动各种需要的服务

# 做各种初始化

# 简单处理一下docker的监控问题

# 等待一会等所有进程都初始化完成
sleep 10s
cd $(dirname $0) || exit 1
while true
do
    # 死循环不断检查一下进程是否存在
    for process in mysql apache nginx
    do
        ps -fe|grep $process |grep -v grep
        if [ $? -ne 0 ]
        then
            echo $process" is down."
            exit 1
        else
            echo $process" is running."
        fi
    done
    sleep 1h
done

以上是一种比较丑陋的实现方案,有更好的么?

在笔者看来如果有心要完善一点的话可以嵌入一个supervisor作为总领管理所有的进程。

但毕竟麻烦不是么……

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据