摘要:以前没用过java执行shell命令,以为也是像C那样便捷,用个system函数就可以搞定。今天一用才发现不是那么回事。java里面执行shell命令有两种方法:1.使用ProcessBuilderProcessBuilder pb=new ProcessBuilder(cmd);pb.start();2.使用RuntimeRuntime.getRuntime().exec(cmd)但是这个两种方法都有个问题,执行诸如:ps -ef | grep -v grep 带有管道或重定向的命令就会出错。我们都知道使用以上两种方法执行命令时,如果带有参数就要把命令分割成数组或者List传入,不然会被当成
阅读全文
摘要:利用lxc-execute启动应用容器后,可以利用lxc自带的lxc-info获取容器的状态,lxc-monitor监控容器状态的变化,但是不能获取容器内应用的信息。这点可以通过结合Linux ps命令和lxc自带的lxc-ps和lxc-cgroup命令来实现。1.首先我们可以通过lxc-ps获取特定容器内需要监控的应用的pid号#usage:get_pid container_name app_namefunction get_pid{ local pid=`lxc-ps -n $1 |grep $2 | awk '{print $2}'|grep -v PID` echo
阅读全文
摘要:使用LXC应用容器时,容器的生命周期和应用是耦合在一起的。即:Lxc-execute-nfoobar此时用容器foo启动了一个应用bar,在容器启动时,应用就启动了。Lxc-stop-nfoo此时停止了容器foo,根据lxc的规则,容器的应用也就停止了。 通过以上两个例子可以看出应用和容器是紧耦合在一起的,要生一起生,要死一起死。可能有很多人会不明白LXC怎么会有这么蛋疼的规定。其实深入了解一下LXC的实现就清楚了,LXC是基于cgroups实现的,LXC的应用容器并不是一个真正意义上完整的系统,只是一个进程组,然后系统以这个进程组进行资源和安全管理。因此,进程在,容器才在,不能只有容器...
阅读全文
摘要:在之前的博文中(参见Linux Cgroups详解系列),作者对LXC 的实现做了分析,这里再例举一下LXC 的一些不足和作者个人的一些改进意见。(一) 缺少对磁盘配额(disk quota)的支持LXC 依赖于Linux Cgroups 实现资源管理的功能,而Cgroups 并没有相应的子系统来提供限制磁盘空间的功能。对于服务器整合而言,限制磁盘空间是个很有用的功能,可以限制单一应用占有过多的磁盘空间,从而导致其他应用失败。LXC 现在的解决办法是在创建容器的时候利用LVM 创建一个LVM 分区来限制容器可使用的磁盘空间。这个办法依赖于LVM,用户在使用LXC 时需要做额外的工具。最好的解决
阅读全文