在虚拟机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