小公司很少有能力购买大型的UPS,但是绝大多数的小品牌UPS,都只有自己的监控程序,一般都是运行在xp系统上的,很少有能直接支持exsi的,这就有个问题,如何才能让exsi主机在断电的时候自动的进行判断,然后按照设定的顺序依次关闭虚拟机然后自己关机以保护硬盘数据,这就成了一个问题

解决思路

1. 在exsi上运行一个xp虚拟机,然后将ups的usb连接至exsi主机,并映射此usb设备至这台xp虚拟机

2. 在这台xp虚拟机上安装ups自带的监控软件,并设置如果市电断电超过2分钟,这台虚拟机就自动关机

3. 在exsi上运营一个脚本,每隔3分钟就ping一次这个xp虚拟机,如果发现失败了,就说明这个虚拟机关机了,说明市电断电,那么开始依次的执行其他虚拟机的关闭命令,并且关闭此Exsi主机

实际操作流程(参考)

1. 在Exsi上安装xp虚拟机(最小配置即可)和UPS监控程序,这里跳过,每个人购买的UPS品牌不同,按照说明书设置即可。

2. 用vSphere登录Exsi主机,打开SSH功能

打开之后,用PuTTY登录, (可以在很多地方找到下载)

使用root账户登录

登录之后,会用到下面的命令

ls   //这个是列出当前目录下的文件

cd 目录名   //进入某一个目录

现在就利用上面两个命令,进入磁盘目录

cd vmfs/volumes

进入这个目录之后,后面的每个人应该就不一样了,这个时候需要使用 ls 命令

我这个机器,可以看到下面这些内容,其中这个比较亮的字,就是存储,再次使用cd命令进入这个目录

可以看到进入之后,目录显示的是上面那个字符串,这个不用管他,进来了就行。然后再次使用 ls 命令,看看这个目录下面都有啥

可以看到,这个存储下面,是我们在这台Exsi主机上运行的一些虚拟机,(忽略其他的几个,关注ups目录)

这个“ups”目录是我们目前需要建立的,我这个是因为已经弄好了,所以会有这个目录,一般情况下是没有的。

使用  “mkdir ups” 这个命令来建立一个ups文件夹,然后用  cd ups 进入此文件夹

进入之后,我们需要建立3个文件,我分别说明一下他们三个都是什么

apc.sh   //这个是一个可以执行的脚本,作用是判断xp虚拟机是否可以ping通,如果不行,就按照这个脚本里面的内容执行exsi的关机操作

ups.log  //这个是日志文件,记录apc.sh这个脚本的执行的情况,方便日后查看到底是什么时间断电的

ups_shouhu.sh  //这是一个守护,目的是判断apc.sh是否在运行,如果没有,就执行它

在建立这些文件之前,我们需要先获取一些信息,需要知道当前主机都运行了哪些虚拟机,以及他们的编号都是多少

vim-cmd vmsvc/getallvms  //列出当前主机所有的虚拟机

看到类似于上面这个结果,这里面是你当前所有这个主机上的虚拟机,前面的Vmid就是他们的编号,记下来这个编号,后面会用到

好了,下面开始依次建立这三个文件

在exsi下建立文件,需要用到 vi 这个命令(这是个linux下的文本编辑器,不展开说了,想要详细了解的话自己去百度即可,这里仅仅介绍用得到的功能)

用vi建立文件,命令是下面这个

vi apc.sh

输入上面这个之后,就会启动一个vi编辑器,这个时候千万别蒙,因为从现在开始,你的键盘的反馈和之前是完全不一样了,所以别随便按任何键。

我下面这个文件已经编辑完了,看上去有内容,如果是第一次建立这个文件,实际上应该是空的,会在屏幕一侧看到全是那个“~”符号

这个时候你需要首先按键盘上的“Insert”按键一次,注意看这里,现在是“-”,当你按了“Insert”他就变成“I”了。当变成“I”的时候,意思就是可以开始编辑了。这个时候鼠标是不管用的,需要完全使用键盘的上下左右来操作

拷贝下面的这段代码,到记事本,然后需要根据你自己的实际情况进行一些编辑,我尽量在每一行代码下面都做了详细的说明, 在exsi的shell脚本中, #后面的就是注释,所以下面的代码中,所有#开头的,就是注释了。

#!/bin/sh
while
ping -c 1 192.168.0.4 > /dev/null #这个ip地址是你运行xp的那台虚拟机的ip地址,需要改成你自己的
[ $? -eq 0 ];
# $? 是最后一个命令执行状态的返回标记,0代表成功,1代表失败,这一行的作用是判断上面的ping命令是否成功执行了
doecho ' AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log#意思是向后面这个文件中写入一句log,并且记录当前时间,echo 的意思是向指定的io输出一系列的字符等,#上面这行代码里面的datastore1是我的机器路径,需要改成你自己的,后面所有的路径都同理sleep 180 #暂停180秒,这个数字是可以根据自己的实际修改done
#上面这一段的作用是每隔180秒,就ping一次xp虚拟机的ip如果成功了,那么就向log里面写入一条记录然后一直循环下去
#如果上面这一段执行失败了,也就是说ping命令没有成功执行,那么就停止循环,开始执行下面的代码echo ' AC Power maybe off, checking again after 1 minutes ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
#向log文件中写入这次异常并记录时间sleep 60
#等待60秒,可以根据你自己的需要修改ping -c 1 192.168.0.4 > /dev/null
#ping那个运行xp的虚拟机if [ $? -eq 0 ]
#判断上面这个ping语句是否执行成功了,如果成功了则执行then后面这句代码并结束此脚本
#如果上面这次ping失败了,那就说明在前面那个循环失败之后60秒再次尝试,又失败了,说明应该是关机了开始执行else后面的代码
thenecho ' Checkagain, AC Power OK ! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log#
elseecho ' AC Power is already off, shut down Esxi Now! ' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log#向log文件中写入,市电已经断掉了,现在开始执行关机vim-cmd vmsvc/power.shutdown 12#这是一个关键的命令,这个exsi用来关闭虚拟机的命令行,后面的数字,就是刚刚我们前面说的Vmid#也就是说,想要关闭哪台虚拟机,就写哪个数字Sleep 300#暂停300秒,主要是关闭虚拟机需要时间,所以在这里要停一停等一下再关闭exsi主机,可以根据你的经验和UPS的容量自行调整时间/bin/shutdown.sh #关闭exsi主机halt
fi #是和上面的if对应的,语法需要,不用在意

将上面这些代码,拷贝到记事本,根据自己的实际需求进行编辑修改之后,再拷贝,然后到刚刚的PuTTY窗口,那个窗口现在应该是vi编辑器,这个时候在窗口中按鼠标的右键,就应该直接将代码黏贴上了。黏贴之后,应该是类似于下面这样的

这个时候需要保存这个文件,首先按一下esc, 然后按一下“:”这个时候光标会跑到最下面,等待你输入,输入“w”然后回车,是保存这个文件, 然后再按“:”输入“q”回车,退出vi编辑器

这个时候你再用“ls”命令,应该可以看到一个apc.sh文件,但是你的这个文件可能和我的不太一样,不是绿色的,因为他现在还不是可执行文件,没有权限,需要用下面的这个命令来给它一个执行权限,

chmod 777 apc.sh

执行完上面的命令之后,再用“ls”命令看,应该就是绿色的了。

然后用相同的方法,建立ups.log文件,只不过这是一个空文件,不容写内容

下面一步是建立一个守护,来判断apc.sh是否正在执行中,如果没有执行,就执行它。

NUM=`ps -c | grep apc.sh | grep -v grep |wc -l`
echo ${NUM}
#
if [ "${NUM}" -lt "1" ];then
/vmfs/volumes/datastore1/ups/apc.sh &
echo ' UPS shouhu start' >> /vmfs/volumes/datastore1/ups/ups.log;date >> /vmfs/volumes/datastore1/ups/ups.log
fi
exit 0

同样的原理,将这段代码中, 路径的 “datastore1”换成你自己的路径,其他不用变

下面我们建立一个计划任务,每3分钟执行这个守护程序一次,这个时候需要用到exsi下面的计划任务程序,叫“cron”(别问这是啥,如果你不知道没关系,只要按照下面的步骤做就可以了,这个就是一个类似于win的计划任务的东西)

首先用下面的命令打开这个计划任务的列表文件

vi /var/spool/cron/crontabs/root

这个时候vi编辑器就打开了一个文件

你看到的和我看到的应该差不多,但是没有最下面这一行,用上面说的编辑方法,将这一行内容添加进去,注意“datastore1”要改成你自己的路径,然后保存、退出

这个时候已经完成了99%了,唯一的问题是,当exsi重启之后,它会重置这个计划任务,这个文件里面的内容又擦除掉了,所以我们需要让它每次启动的时候,都将这句话自动的写在这个文件里面,下面介绍

首先用下面的命令进入 ect目录

cd /etc

因为rc.local 是只读文件,现要修改一下权限

chmod 777 rc.local

然后用vi编辑器打开rc.local文件

vi rc.local

在打开的文件的最下面加上下面三行代码(将datastore1路径改为你自己的)

/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/3 * * * * /vmfs/volumes/datastore1/ups/ups_shouhu.sh' > /var/spool/cron/crontabs/root
/bin/busybox crond

然后保存退出

验证一下 apc.sh是否在执行。使用下面这行,如果结果是“1”,就说明正在运行中

ps -c | grep apc.sh | grep -v grep |wc -l

看看日志文件是否正常记录了。(先要进入到ups.log所在的目录,方法看前面)

cat ups.log

希望这个对大家有帮助,网上看了很多文章都没有留联系方式,有些问题想要问问作者也不知道找谁,我留个联系方式吧,有问题可以给我发邮件 nizongdai@gmail.com 我看到的话尽量解答。

Exsi主机判断UPS状态自动进行关机的讨论相关推荐

  1. zabbix加vm虚拟服务器,zabbix监控vmware exsi主机的图文步骤

    1.进入虚拟化vcenter中,用浏览器登录(客户端没找到地方设置),新建一个只读用户zabbix. 2. 登录vcenter客户端,将新建用户授权为只读 授权过后可以使用新账号登录测试一下. 3.开 ...

  2. IPv6地址的无状态自动配置

    首先我们看看IPv4是如何动态配置的IP地址的,在IPv4中,动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)实现了主机IP地址及其相关配置的自动设 ...

  3. ipv6无状态自动分配地址,是如何进行工作的。

    ipv6无状态自动分配地址,是如何进行工作的. IPV6无状态自动分配地址 主机或路由器从RA报文里获得64位前缀,然后通过EUI-64规范自动生成64bit的接口标识,然后得到IPV6单播地址. 默 ...

  4. 6-ipv6基础知识之-有状态和无状态自动配置

    在IPV6的自动配置中,分为两种技术 一种是传统的有状态(stateful),典型代表就是与IPv4时代相对应的DHCPv6, 一种是IPv6的无状态(stateless)自动配置,这是IPv6协议的 ...

  5. http请求判断网络状态

    // http 请求返回码==200 表明网络连接正常 int checkWithHttpRequest() {//加载套接字库WORD wVersionRequested;WSADATA wsaDa ...

  6. 搭建ipv6有状态dhcp服务器,思科IPv6技术 IPv6有状态自动配置地址

    IPv6支持有状态自动配置获得地址的方式,这涉及到RA消息中的两个bit,M bit和O bit.如图所以为RA消息的格式: M是管理地址的配置标记.如果设置了该位,始发路由器就会利用DHCPv6协议 ...

  7. Android 自动开关机

    转自:cnblog,http://www.cnblogs.com/melaniedeng/archive/2012/02/16/2355066.html 关于android自动关机,网上有很多应用程序 ...

  8. ipV6无状态自动配置(SLAAC)

    IPV6无状态自动配置(SLAAC)   IPV6主机自动获得地址方法:1.SLAAC                             2.DHCPV6无状态(配置网关,DNS,排除地址)+S ...

  9. python安装过程中关机_1234567,Python帮女神自动来关机

    在日常使用电脑的过程中,很多小伙伴都有让电脑定时自动关机的需求.通常而言,大家一般都会有几种选择. 假如哪一天,你女神问你,有没有什么定时关机的好方法,你怎么告诉她? 文章首发州的先生博客:使用Pyt ...

最新文章

  1. 【模板】树状数组 2
  2. cad 怎么显示块句柄_新手必看的CAD小技巧,老师傅精选汇总,三分钟教你学习用处多多...
  3. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度
  4. 数据库索引失效情况汇总
  5. 大于2的质数判断以及范围质数查找
  6. java多线程笔记补充之线程的生命周期
  7. Linux系统中read的用法,Linux中read命令的用法
  8. 理论与实践中的 C# 内存模型
  9. linux条件变量唤醒丢失,多线程编程精髓(三)
  10. 自学python-自学编程的6种方法,自学Python
  11. CSipsimple最新版本编译
  12. BOOST库介绍(六)——容器
  13. 游侠小秘书基本智能框架完成!!!
  14. 计算机辅助翻译术语PPT,计算机辅助翻译
  15. PHP函数array_intersect_ukey
  16. r语言平均值显著性检验_5.3 两总体均值检验和方差分析的R语言操作(26页)-原创力文档...
  17. [unity2D] 迷你拼图
  18. 安卓java百度地图api文档_Android调用百度地图API 实时定位代码
  19. 手把手教你用Python打造一个语音合成系统(已生成软件)
  20. Auto CAD:图纸常用线宽、线型表之详细攻略

热门文章

  1. 9100cdn打印有色差_uv打印机出现色差的解决方法
  2. 基于RFM模型实现的零售精准营销响应预测系统
  3. c语言编辑饮酒卷,李白饮酒——蓝桥杯
  4. ssh mysql视屏_ssh+MySQL开发VOD视频点播系统
  5. 微信接口源码、微信定制功能源码
  6. 2015老男孩Linux中高级运维19期
  7. 跨境卖家该怎么选择海外收款账户
  8. mysql网吧管理系统_基于jsp的网吧管理系统-JavaEE实现网吧管理系统 - java项目源码...
  9. CKA和HCIE那个证书含金量高?
  10. 论文翻译:ViBe+算法(ViBe算法的改进版本)