有些时候,由于各种历史原因,某些应用的服务之间耦合度非常高,具体表现为各种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作为总领管理所有的进程。
但毕竟麻烦不是么……