如何在 VMware ESXi 上配置每日定时关机(含虚拟机安全关闭)

在日常使用 VMware ESXi 的过程中,可能会遇到需要**定时关机主机**的场景,比如:

- 主机托管在办公室,下班后无需运行

- 出于节能或数据安全考虑

- 希望自动关机保护虚拟机数据完整性

由于 ESXi 是类 Linux 系统,但又进行了高度裁剪,**默认并不支持 crontab 命令**,也没有开箱即用的图形界面任务计划功能,因此我们需要通过**手动配置 cron 文件 + 修改系统启动脚本**的方式来实现这一需求。

---

一、目标

每天北京时间 1:00 自动执行如下操作:

1. 关闭指定虚拟机

2. 安全关机宿主机 ESXi

---

二、整体思路

ESXi 的 cron 配置文件在 /var/spool/cron/crontabs/root,但该文件是临时的,**主机重启后会被清空**。

因此我们需要:

1. 编写关机脚本(永久保存在 datastore 中)

2. 编辑 /etc/rc.local.d/local.sh 文件,在开机时自动写入 cron 任务并启动 cron 服务

3. 执行一次 /sbin/auto-backup.sh,将开机脚本保存到持久配置中

4. 若要测试,建议先注释掉关机主机命令,只关闭虚拟机

---

三、详细步骤

### 步骤 1:编写关机脚本

路径:`/vmfs/volumes/datastore1/autoshutdown.sh`

内容如下(请替换为你自己的虚拟机 ID):

#!/bin/sh
# 关机指定虚拟机(替换成你的VMID. vim-cmd vmsvc/getallvms 查询所有已配置的虚拟机,可获得VMID)
vim-cmd vmsvc/power.off 6

# 关机宿主机
/sbin/poweroff

四、添加执行权限

chmod +x /vmfs/volumes/datastore1/autoshutdown.sh

五、配置系统启动脚本

编辑 /etc/rc.local.d/local.sh 文件,在 exit 0 之前添加如下内容:

# 杀掉已有 cron 服务
/bin/kill $(cat /var/run/crond.pid 2>/dev/null)

# 清空旧的 root 定时任务,避免重复
echo "" > /var/spool/cron/crontabs/root

# 添加定时关机任务(注意 ESXi 默认使用 UTC 时间,17:0 对应北京时间 01:00 第二天)
echo '0 17 * * * /vmfs/volumes/datastore1/autoshutdown.sh' >> /var/spool/cron/crontabs/root

# 启动 cron 服务
/usr/lib/vmware/busybox/bin/busybox crond

六、立即保存修改

/sbin/auto-backup.sh

这个命令会保存 /etc/rc.local.d/local.sh 的修改,使其重启后依然有效。

文章作者: Wind
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 雕刻时光
喜欢就支持一下吧