前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >UPS与ESXI联动实现断电自动关机

UPS与ESXI联动实现断电自动关机

原创
作者头像
RokasYang
修改2022-04-06 05:01:02
16.9K2
修改2022-04-06 05:01:02
举报
文章被收录于专栏:RokasYang

ESXi是广为人知的商业虚拟化软件,只有少部分高级UPS才能适配这种企业级软件,普通UPS要做到关机,需要使用脚本联动完成,一旦检测到某个action,就触发或延时触发关机动作(UPS还能撑几十分钟),避免文件系统、硬盘、电源等损坏,得不偿失,同理,只要有类似脚本功能的设备只要插上UPS,都能做到断电自动关机的功能,而UPS本身高度支持的设备可通过数据通信线及后台配置即可,相对方便些,如群晖NAS。

一、开启ESXI的ssh功能,并ssh登录ESXI创建ups脚本

1.进入到ESXI web控制台,开启ssh功能

2.ssh连接到ESXI,创建必要文件及脚本

脚本逻辑:每1分钟ping一次指定IP,每次只ping一次,如果达到2次,三分钟后再ping一次,此时如果还是不通,就记录时间写入日志到ups.log,并执行关机命令,具体时间和逻辑你可以随意更改:

代码语言:txt
复制
[root@localhost:~] cd /vmfs/volumes/data   #cd到对应硬盘卷,以你的硬盘命名为准
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187]mkdir ups
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187]cd ups
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]touch ups.log  #写日志用
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]vim ups.sh  #创建以下脚本
#!/bin/sh 
UPS_LOG=/vmfs/volumes/data/ups/ups.log
count=0
IP=192.168.1.200   # 写你的网关IP,只要是断电ping不通的IP都行
while :;do
ping -c 1 $IP > /dev/null
if [ $? -eq 0 ]; then 
        :
else
        count=$(expr $count + 1);
fi

sleep 60

if [ $count -ge 2 ]; then
        echo "$(date) AC Power maybe off, checking again after 3 minutes ! " >> $UPS_LOG
        sleep 180
        ping -c 1 $IP &>/dev/null
        if [ "$?" -eq 0 ]; then
                echo "$(date) Checkagain, AC Power OK ! " >> $UPS_LOG
        else
                echo "$(date) AC Power is already off, shut down ESXi Now! " >> $UPS_LOG
                /bin/shutdown.sh
                halt
        fi

else

        continue

fi
done
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]chmod +x ups.sh  #给个执行权限就行,没必要777
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]

3.验证脚本是否生效

ESXI的sh是链接到busybox的,相当于裁剪版bash,所以语法不可能和bash完全一样:

前面加过执行权限了,./ups.shsh ups.sh都行,为了看到脚本处理逻辑,加个-x参数:

ping是通的,所以$_上一个命令的返回码为0,对比表达式,满足条件,:占位符表示什么都不做,休眠60秒后继续ping,此时说明脚本正常,如果你想看到整个脚本处理逻辑,ping一个不通的IP即可。

二、守护进程与NOHUP

这里有两种方式,一种是守护进程,一种是nohup+后台运行,写入到开机自启脚本,两种方式选一种即可

1.守护进程方式

所谓守护进程,顾名思义,就是守护它要守护的进程,如何实现?最简单的守护进程就是间隔指定时间去检查进程是否正常运行,没有在运行就调用启动脚本或命令让进程运行起来,一直守护它整个生命周期。

代码语言:txt
复制
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]vim ups_daemon.sh  #写入以下脚本
#!/bin/sh

result=$(ps -c |awk '!/awk/&&/ups.sh/{print}'|wc -l)  #通过awk和wc判断进程是否在运行

if [ "${result}" -lt "1" ]; then

        /vmfs/volumes/data/ups/ups.sh &
        echo "$(date) UPS daemon process running" >> /vmfs/volumes/data/ups/ups.log

fi
exit 0
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]chmod +x ups_daemon.sh #给执行权限
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]

写入到开机自启:

代码语言:txt
复制
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]cat /etc/rc.local.d/local.sh
/bin/kill $(cat /var/run/crond.pid)
/bin/echo '*/3  *  *  *  *   /vmfs/volumes/data/ups/ups_daemon.sh' >> /var/spool/cron/crontabs/root
/bin/crond
exit 0
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]

ESXI的crond进程重启后会把写入的定时任务清空,只保留系统的,写到开机自启脚本以确保每次重启在crond里面有守护进程任务,每三分钟执行一次守护进程脚本,也就是每三分钟判断一次ups.sh脚本是否在正常运行。

2.NOHUP

懒人专用,一条命令即可,开机或重启后自动运行:

代码语言:txt
复制
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]vim /etc/rc.local.d/local.sh #写入以下内容
{ nohup sh /vmfs/volumes/data/ups/ups.sh; } &>/dev/null & #nohup后台运行脚本,并禁止在控制台输出stdout或stderr,禁止输出文本
[root@localhost:/vmfs/volumes/5f174c56-6a79f5cc-c990-a03e6ba0a187/ups]

使用此方式后只有下次开机才会运行脚本,为了不重启直接运行一遍即可:

代码语言:txt
复制
{ nohup sh /vmfs/volumes/data/ups/ups.sh; } &>/dev/null &

3.确保进程在后台正常运行

这个就不用过多赘述了,ps命令直接看,和其他linux发行版的ps入参有些不一样:

到此,整个UPS和ESXI联动已经做完,可反复断电测试,一劳永逸;如果你本地做了DDNS,可以配合dnspod的D监控功能,一旦感知到IP:PORT或URL无法访问,发短信/邮件告警,真正做到千里之外感知到家里断电及恢复时间。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、开启ESXI的ssh功能,并ssh登录ESXI创建ups脚本
    • 1.进入到ESXI web控制台,开启ssh功能
      • 2.ssh连接到ESXI,创建必要文件及脚本
        • 3.验证脚本是否生效
        • 二、守护进程与NOHUP
          • 1.守护进程方式
            • 2.NOHUP
              • 3.确保进程在后台正常运行
              相关产品与服务
              短信
              腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档