ESXI定时关机脚本

没有ups的esxi服务器,需要在停电前定时关机:

参考文章:http://blog.51cto.com/h2appy/1106164

过程:

  1. 首先进入ESXI6.0的命令行,发现官方的脚本 /sbin/powerOffVms 有问题,查找后是python2.7的语法,但是

6.0已经是python3了,把 脚本中的 exception ,e 都改为 exception as e即可,改后应该存入

/vmfs/volumes/datastore1/目录下,sbin下的文件重启后即消失。

 

2. 再在该目录下加入关esxi脚本:

#!/bin/ash
/vmfs/volumes/datastore1/poweroffmyvms

/sbin/poweroff

本来想在esxi中加入crontab任务,一直没有成功,可能是权限不够? 只能改成远端的ubuntu上用crontab执行ssh脚本实现

3.远端的ssh脚本,本来想用python实现,但是ssh模块一直安装不成功,只好用shell脚本加上expect实现,代码如下:

#!/usr/bin/expect -f
set user root
set host ×××
set port 22
set password ×××
set timeout -1

spawn ssh $user@$host -p $port
expect {
 "*yes*" {send "yes\r";expect_contine}
  "*word:" {send "$password\r"}
   }
expect "*×××" 
send "./vmfs/volumes/datastore1/autoshutdown.sh\r"
send "exit\r"
expect eof exit 0

 

×××根据具体环境确定

 

<think>我们正在回答用户关于VMwareESXi设置定时关机的问题。根据提供的引用,我们可以总结出以下信息:1.引用[1]提到可以通过ESXi控制台按F12输入密码后选择关闭或重启主机,但这属于手动操作。2.引用[2]提供了几个vim-cmd命令,用于查询虚拟机状态、发送关机信号和直接关机(相当于断电)。3.引用[3]和[4]则提供了设置定时关机脚本方法,包括创建关机脚本并利用crontab定时执行。因此,设置定时关机的主要思路是:-创建关机脚本(如auto_shutdown.sh)和开机脚本(如果需要定时开机,但注意ESXi主机本身定时开机通常需要BIOS支持,这里我们主要关注定时关机,因为定时开机一般由硬件BIOS设置)。-利用ESXi的crontab服务来定时执行这些脚本。但是,需要注意的是:-ESXi的cron服务默认是关闭的,需要手动开启并配置。-ESXi的设计初衷是稳定运行,因此频繁的开关机可能不是推荐做法,请确保在合适场景下使用。具体步骤:###设置定时关机1.**创建关机脚本**例如,在datastore1上创建一个名为auto_shutdown.sh的脚本,内容如下:```bash#!/bin/bash#关闭所有虚拟机(先尝试正常关机,如果失败则强制关机)#获取所有虚拟机的VMIDforvmidin$(vim-cmdvmsvc/getallvms|awk'{if(NR>1)print$1}');do#检查虚拟机是否处于运行状态state=$(vim-cmdvmsvc/power.getstate$vmid|grep-i"Poweredon")if["$state"];then#先尝试正常关机(发送关机信号,等待操作系统关机)vim-cmdvmsvc/power.shutdown$vmid#等待一段时间,例如60秒,让虚拟机正常关机sleep60#再次检查虚拟机状态,如果仍然运行,则强制关机state_again=$(vim-cmdvmsvc/power.getstate$vmid|grep-i"Poweredon")if["$state_again"];thenvim-cmdvmsvc/power.off$vmidfifidone#关闭主机/sbin/poweroff```注意:这个脚本会尝试正常关闭所有正在运行的虚拟机(发送关机信号),等待60秒后,如果虚拟机还在运行则强制关机。最后关闭ESXi主机。2.**将脚本设置为可执行**在ESXi的SSH会话中执行(需要开启ESXi的SSH服务):```bashchmod+x/vmfs/volumes/datastore1/auto_shutdown.sh```3.**配置crontab定时任务**ESXi默认的cron服务可能是停止的,我们需要启动它并添加计划任务。-编辑root用户的crontab文件:```bashvi/var/spool/cron/crontabs/root```如果文件不存在,可以创建它。-添加一行定时任务,例如每天凌晨2点30分关机(注意:ESXi系统时间默认是UTC,需要换算成当地时间,或者设置时区):```302***/vmfs/volumes/datastore1/auto_shutdown.sh```这里的时间是UTC时间。如果ESXi主机设置为本地时间(比如北京时间),则按当地时间设置。例如,北京时间凌晨2点30分就是2:30(如果ESXi系统时区设置为东八区,则与UTC+8一致,所以写2:30即可)。-保存文件。4.**启动cron服务**由于ESXi重启后cron服务不会自动启动,所以我们需要确保每次启动时开启cron服务。可以创建一个启动脚本(如/etc/rc.local.d/local.sh)来启动cron服务:```bash#!/bin/bash#启动cron服务/bin/kill$(cat/var/run/crond.pid)2>/dev/null#先停止已有的cron进程(如果有)/usr/lib/vmware/busybox/bin/busyboxcrondexit0```然后给这个脚本可执行权限:```bashchmod+x/etc/rc.local.d/local.sh```这样每次主机启动时就会自动启动cron服务。5.**手动启动cron服务(立即生效)**执行:```bash/bin/kill$(cat/var/run/crond.pid)2>/dev/null/usr/lib/vmware/busybox/bin/busyboxcrond```###注意事项-**时区问题**:ESXi默认使用UTC时间,如果你的主机使用本地时间,请确保在crontab中填写的时间是正确的(或者调整ESXi的时区)。-**虚拟机正常关机**:脚本中使用了`power.shutdown`尝试正常关机,这需要虚拟机内安装并运行了VMwareTools,否则可能无法正常关机。-**强制关机的风险**:强制关机(`power.off`)相当于直接断电,可能导致虚拟机数据损坏,应尽量避免。-**测试**:在生产环境使用前,务必测试脚本定时任务。###关于定时开机ESXi主机本身的定时开机通常依赖于硬件BIOS设置(如WakeonRTC)。在ESXi系统中无法直接设置主机定时开机。因此,如果需要定时开机,请进入主机的BIOS设置RTC唤醒功能。###总结通过以上步骤,我们可以在ESXi上设置定时关机定时开机则需要通过主机的BIOS设置。§§相关问题§§1.如何修改ESXi主机的时区?2.如何检查ESXi主机上虚拟机的VMID?3.如何安全地关闭ESXi主机上的虚拟机?4.如何设置ESXi主机的BIOS定时开机?</think>### VMware ESXi 设置定时关机的方法 在 VMware ESXi 中设置定时关机主要通过以下步骤实现,分为**定时关机**和**定时开机**两部分: --- #### **一、定时关机设置** 定时关机需结合 **Shell 脚本** 和 **cron 计划任务**,步骤如下: 1. **创建关机脚本** 通过 SSH 登录 ESXi(需先启用 ESXi 的 SSH 服务),在存储卷上创建脚本(如 `auto_shutdown.sh`): ```bash #!/bin/bash # 关闭所有虚拟机(先尝试正常关机,失败则强制断电) for vmid in $(vim-cmd vmsvc/getallvms | awk 'NR>1 {print $1}'); do vim-cmd vmsvc/power.shutdown $vmid # 发送软关机信号 sleep 30 # 等待30秒 if vim-cmd vmsvc/power.getstate $vmid | grep -q "Powered on"; then vim-cmd vmsvc/power.off $vmid # 强制断电 fi done # 关闭ESXi主机 /sbin/poweroff ``` > 说明: > - `vim-cmd vmsvc/getallvms` 获取所有虚拟机 ID(VMID)[^2] > - `power.shutdown` 尝试正常关机(需 VMware Tools 支持) > - `power.off` 强制断电(备用措施)[^3] 2. **设置脚本权限** ```bash chmod +x /vmfs/volumes/datastore1/auto_shutdown.sh ``` 3. **配置 cron 定时任务** 编辑 root 用户的 cron 表: ```bash vi /var/spool/cron/crontabs/root ``` 添加一行(示例为每天 02:51 UTC 执行,相当于北京时间 10:51): ```bash 51 2 * * * /vmfs/volumes/datastore1/auto_shutdown.sh ``` > 注意:ESXi 默认使用 **UTC 时间**,需换算时差[^4]。 4. **启动 cron 服务** ```bash /bin/kill $(cat /var/run/crond.pid) # 停止现有服务 /usr/lib/vmware/busybox/bin/busybox crond # 启动新服务 ``` --- #### **二、定时开机设置** ESXi 自身无法直接设置定时开机,需依赖 **硬件 BIOS/UEFI 的 RTC 唤醒功能**: 1. 进入物理服务器的 BIOS/UEFI 设置。 2. 找到 **"Power Management"** 或 **"RTC Wake"** 选项。 3. 设置唤醒日期和时间(如每日 08:00)。 4. 保存设置并重启主机。 > 注意:不同硬件厂商(如 Dell、HP)的选项名称可能略有差异。 --- #### **注意事项** 1. **脚本安全** - 测试脚本前建议先手动关闭虚拟机: ```bash vim-cmd vmsvc/power.shutdown <VMID> ``` - 强制断电(`power.off`)可能导致数据损坏,仅在必要时使用[^2]。 2. **时区问题** - 若需使用本地时间,可修改 ESXi 时区: ```bash esxcli system time set -T Asia/Shanghai ``` 3. **服务自启** ESXi 重启后 cron 服务不会自动运行,需在 `/etc/rc.local.d/local.sh` 添加启动命令: ```bash /usr/lib/vmware/busybox/bin/busybox crond ``` --- #### **操作流程图** ```mermaid graph TD A[创建关机脚本] --> B[设置脚本权限] B --> C[配置cron计划任务] C --> D[启动cron服务] D --> E[定时关机生效] F[BIOS设置RTC唤醒] --> G[定时开机生效] ``` > **重要提醒**:生产环境操作前务必在测试环境验证,避免意外中断业务[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值