ESXI7.0 定时关闭虚拟机并自动关机设置
本文由 简悦 SimpRead 转码, 原文地址 anby.org
前言在家庭环境中,考虑到省电问题(服务器晚上也挺吵的),购买了小米的智能插座,设置了一个定时开关插座任务。(9:00 开启 23:00 关闭)关于服务器的通电自动开机,在 dell poweredge …
在家庭环境中,考虑到省电问题(服务器晚上也挺吵的),购买了小米的智能插座,设置了一个定时开关插座任务。(9:00 开启 23:00 关闭)
关于服务器的通电自动开机,在 dell poweredge r530 的 BIOS 里就能设置,处于安全考虑我还设置了通电后 60 秒的延迟开机。(在米家 app 自己有时会手残误操作)
但,这仅仅只解决了自动通断电和自动开机的问题,如果 esxi 上的虚拟机在定时断电之前没有关机的话,一定程度上可能会造成数据丢失、系统文件损毁等问题。
由于 VMware esxi 并没有提供定时关机的设置,只能通过脚本来实现。
实验目的:
让服务器可以按照以下时间流程自动运行:
09:00 小米插座自动通电
09:01 自动开机
09:06 自动向 esxi 写入定时关机系统计划任务(预计时间)
22:40 关闭全部正在运行的虚拟机
22:45 正常关机
23:00 小米插座自动断电
实验环境:
硬件:dell poweredge r530
OS:esxi 7.0 u2
登录 esxi 管理界面,然后如图启用 ssh 连接。
在 esxi 的 shell 命令行中不支持 cron 命令,只能修改计划任务文件(/var/spool/crontab/root),但由于这个文件每次重启后会被自动重置,所以我们需要设置开机自动向计划任务文件里添加定时关机。
我们只需要修改(/etc/rc.local.d./local.sh),在 [exit 0] 这一行之前添加如下的脚本,使其每次开机都自动添加定时任务。
- 用 vim 文本编辑打开
1 | vi /etc/rc.local.d./local.sh |
- 在 exit 0 这一行之前添加如下的脚本并退出保存:
1 | #关闭cron进程(关闭进程后修改计划任务root文件) |
注:
- [#] 符号后为注释,并非命令。
- 40 13 、45 13 处表示任务执行时间,格式为 [分] [时] [日] [月份] [星期],由于 esxi 的系统时间采用的是 UTC 时间(国际标准时间),而中国是 UTC+8,所以想要在北京时间 22:40 时关闭虚拟机的话,就只需要用 22-8 算出 UTC 时间为 14,任务执行时间填写为 40 14 、45 14 就可以了。(由于博主是在日社畜,命令使用的是日本时间,国内的小伙伴请自行替换)
- datastore1 处为 esxi 的本地存储的名称,请按实际情况自行替换。
- vm-shutdown.sh、esxi-shutdown.sh 处分别为关闭虚拟机、关机脚本的名称。可自行命名定义。
- 关于 vi 命令的使用方法,请另行谷歌、百度查找。
由于 / etc/rc.local.d./local.sh 文件重启后会丢失,所以需要手动执行一次下面的命令。(local.sh 文件每次更改后想要永久保存设置的话,就需要手动执行一次。)
1 | /sbin/auto-backup.sh |
由于 esxi 的特性,每次重启后系统文件都会被重置,如果把脚本存放在这些地方就需要每次开机后手动再创建一次脚本。但 / vmfs/volumes/datastore1 / 目录里的文件不会被重置。所以我们需要在这个目录下创建关闭虚拟机和关机两个脚本。在此之前我们需要了解一下 esxi 关于关闭虚拟机命令的使用方法以及注意事项。在本次实验中将会用到以下命令:
1 | #查询现有的虚拟机一览,可以查询到VMID |
以下是相关命令,感兴趣的小伙伴们可以尝试一下。
1 | #查询虚拟机的电源状态。(开机、关机) |
- 获取需要自动关机的虚拟机 VMID
1 | vim-cmd vmsvc/getallvms |
- 创建关闭虚拟机脚本文件
1 | vi /vmfs/volumes/datastore1/vm-shutdown.sh |
- 向脚本文件添加命令并保存
1 | #!/bin/sh |
- 创建关机脚本文件
1 | vi /vmfs/volumes/datastore1/esxi-shutdown.sh |
- 向脚本文件添加命令并保存
1 | #!/bin/sh |
- 给关闭虚拟机、关机的脚本添加可执行权限
1 | chmod +x /vmfs/volumes/datastore1/vm-shutdown.sh |
注:
- [#] 符号后为注释,并非命令。
- datastore1 处为 esxi 的本地存储的名称,请按实际情况自行替换。
- vm-shutdown.sh、esxi-shutdown.sh 处分别为关闭虚拟机、关机脚本的名称。可自行命名定义。注意要和 / etc/rc.local.d./local.sh 文件里填入的文件名一致。
- 关于 vi 命令的使用方法,请另行谷歌、百度查找。
到第五部分为止,已经完成了大部分设置,但脚本还暂时未生效。以下分两种方法介绍如何使脚本生效。
- 关机重启生效法
通过 esxi 管理界面手动重启,并再次启用 ssh 后输入以下命令:
1 | cat /var/spool/cron/crontabs/root |
会输出如下结果,可以看到成功添加了定时关机命令(输出结果可能会有变动,请按照实际情况判断。)
1 | #min hour day mon dow command |
- 手动命令生效法
在 esxi 启用了 ssh 的情况输入以下命令(请按照第二部分设置的代码,自行变更以下命令):
1 | /bin/kill $(cat /var/run/crond.pid) |
会输出如下结果,可以看到成功添加了定时关机命令(输出结果可能会有变动,请按照实际情况判断。)
1 | #min hour day mon dow command |
到此为止,已经完成了 ESXI7.0 下的定时关闭虚拟机并自动关机的目的,感兴趣小伙伴可以自行尝试一下。如果有什么问题,请在下方留言。