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分钟检测一次,检测到开机后退出,根据自己需求修改:
|
最后要加上执行权限 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,#是方便调试的注释,简单的脚本是这样:
|
别忘了最后要加上执行权限 chmod 744 test.sh
2.修改/etc/rc.local.d/local.sh实现重启也能自动添加计划任务:
|
定时任务请补充下crontab的知识。
补充:
1、控制虚拟机开关机
To power on a virtual machine from the command line:
List the inventory ID of the virtual machine with the command:
|
Note: The first column of the output shows the vmid.
Check the power state of the virtual machine with the command:
|
Power-on the virtual machine with the command:
|
关机就是把 power.on
改为 power.off
就可以了.
2、shell中特殊变量含义
$0:
执行脚本的名字
$*和$@:
将所有参数返回
$#:
参数的个数
$_:
代表上一个命令的最后一个参数
$$:
代表所在命令的PID
$!:
代表最后执行的后台命令的PID
$?:
代表上一个命令执行是否成功的标志,如果执行成功则$? 为0,否则不为0