VMware esxcli定时开启虚拟机、维护开机状态

ESXi的虚拟机开机自启动功能,如果虚拟机不可用的话是没法实现开机自启动的,比如主机的开机速度快而连的存储开机慢。

可以设定开机一段时间内检测状态并开机。

脚本结合crond定时执行,能做到虚拟机vms定时开机关机,后台定时检测虚拟机停止就自动开机,让虚拟机一直运行。

思路

1.检测虚拟机是否已开机

2.如果虚拟机状态开机则不执行任何操作,退出;否则开机打开电源

3.用crond定时执行检测脚本

具体操作

esxcli vm process list                              # 利用esxcli列出ESXi服务器上VMs(运行状态的)

vim–cmd vmsvc/getallvms |grep <vm name>  # 获取出vmid来,开机命令会用到

vim-cmd vmsvc/power.on <vmid>  # 执行开机

开机检测

vi /vmfs/volumes/datastore222/startVM.sh
注:之所以要在volume上创建脚本是因为如果直接在/etc等目录创建后重启就没了。

通过vim-cmd vmsvc/getallvms获取虚拟机名称与编号。

比如我的虚拟机名称是’Server-2016’,vmid是18,#是方便调试的注释。

前50分钟每5分钟检测一次,检测到开机后退出,根据自己需求修改:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#!/bin/sh

 

#后面的数字为虚拟机编号

for vm in 18 83 86

do

{

for i in {1..11}  

do  

#vim-cmd vmsvc/getallvms |grep <vm name>

#vim-cmd vmsvc/power.getstate <vmid>

#vim-cmd vmsvc/power.on <vmid>

vim-cmd vmsvc/power.getstate $vm|grep 'Powered on'

ret=$?

if [ $ret == 0 ]

then

#echo $vm' is running,do nothing..'

exit 0

else

#echo $vm' is stoped,starting..'

vim-cmd vmsvc/power.on $vm

#echo 'Done.'

fi

sleep 5m;  

done

}&

done

最后要加上执行权限 chmod 744 startVM.sh

修改/etc/rc.local.d/local.sh实现重启也能自动添加计划任务:

加入这一行/vmfs/volumes/datastore222/startVM.sh

后台一直运行

1.创建计划任务脚本:

vi /vmfs/volumes/datastore222/test.sh
注:之所以要在volume上创建脚本是因为如果直接在/etc等目录创建后重启就没了。

比如我的虚拟机名称是’Server-2016’,vmid是18,#是方便调试的注释,简单的脚本是这样:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#!/bin/sh

#vim-cmd vmsvc/getallvms |grep <vm name>

#vim-cmd vmsvc/power.getstate <vmid>

#vim-cmd vmsvc/power.on <vmid>

esxcli vm process list|grep 'Server-2016'

ret=$?

if [ $ret == 0 ]

then

#echo 'Server-2016 is running,do nothing..'

exit 0

else

#echo 'Server-2016 is stoped,starting..'

vim-cmd vmsvc/power.on 18

#echo 'Done.'

fi

别忘了最后要加上执行权限 chmod 744 test.sh

2.修改/etc/rc.local.d/local.sh实现重启也能自动添加计划任务:

 

1

2

3

4

5

chmod +w /var/spool/cron/crontabs/root

/bin/kill $(cat /var/run/crond.pid)

/bin/echo '*/10 * * * * /vmfs/volumes/datastore222/test.sh' >> /var/spool/cron/crontabs/root

crond

exit 0

定时任务请补充下crontab的知识。

 

补充:

1、控制虚拟机开关机

To power on a virtual machine from the command line:

List the inventory ID of the virtual machine with the command:

 

1

vim-cmd vmsvc/getallvms |grep <vm name>

Note: The first column of the output shows the vmid.

Check the power state of the virtual machine with the command:

 

1

vim-cmd vmsvc/power.getstate <vmid>

Power-on the virtual machine with the command:

 

1

vim-cmd vmsvc/power.on <vmid>

关机就是把 power.on 改为 power.off 就可以了.

2、shell中特殊变量含义
$0:
执行脚本的名字
$*和$@:
将所有参数返回
$#:
参数的个数
$_:
代表上一个命令的最后一个参数
$$:
代表所在命令的PID
$!:
代表最后执行的后台命令的PID
$?:
代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0

 

转自https://zerlong.com/697.html

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值