在虚拟机center上写了一个管理关闭整个系统服务和虚拟机的shell

但是在执行后为了以防“上述关闭过程中有差错而导致没有关闭全部虚拟机,从而在关闭物理机时直接关闭虚拟机”这一过程出现风险,所以写了一个在物理机关机前的检测脚本,记录如下:


part1: 主要为对状态的检测,把当前状态为running的机器从列表中截取出来

[root@test03 bak]# cat old.sh
#!/bin/sh

virsh list --all | grep running > /root/bak/run.txt ---//从列表中取状态为running的行

awk '{print $2}' /root/bak/run.txt > /root/bak/run2.txt ---//从上述行中取出虚拟机的机器名


part2:对part1中获取的机器名进行观察,

如果虚拟机全部已经关闭,则直接关机

如果还有虚拟机没有关闭,则进行等待观察:第2分钟观察一次状态,观察5次之后,如果还有处于running状态的虚拟机,则对虚拟机进行关闭操作,然后再关闭物理机

[root@test03 bak]# cat test.sh
#!/bin/sh
for var in 1 2 3 4 5 --//下述过程循环5次
do
sh /root/bak/old.sh --//调用执行part1获取
if [ ! -s /root/bak/run2.txt ];then --//对获取的文件进行判断,如果文件为空则直接关闭物理机
init 0
fi --//否则等待120s
echo ------$var---------
sleep 120
done

cat /root/bak/run2.txt | while read machine -//循环上面5次之后,对获取的机器进行逐一关机
do
echo $machine
virsh shutdown $machine
done

init 0