一、运行环境
软路由上跑了 esxi 6.7,esxi 上运行了 openwrt 虚拟机作为主路由,UPS 给软路由供电
实现功能
1.停电后UPS供电期间esxi自动关机
ping内网市电供电的设备,判断当前市电是否正常,如果超过指定次数,都不能ping通,则说明市电故障,关机,从而实现停电自动关机
2.网络故障自动恢复
ping 外网IP,超过指定次数不能ping通,则重启openwrt虚拟机,如果连续重启了指定次数网络还不能恢复正常,则重启软路由
二、整体文件结构

config.ini 配置文件
log.txt 日志文件,由程序生成
power_and_network.py 脚本文件
三、python 脚本
文件路径:
/vmfs/volumes/datastore1/python_scripts/power_and_network/power_and_network.py
坑坑:注意赋予文件执行权限!!!
#!/bin/python3
# -*- coding: utf-8 -*-
import os, sys
import time
import subprocess
import logging
import configparser
config = {
}
def process_detect():
'''检测当前是否已经有在运行该程序,有则退出'''
status, output = subprocess.getstatusoutput("ps -c | grep %s | grep -v grep | wc -l" % os.path.basename(__file__))
print("Number of processes: %s" % output)
process_sum = int(output)
if process_sum > 1:
print("Process already running, exit!");
sys.exit()
else:
logging.info("Start ===== ")
def ping(addr):
'''ping 指定ip,网络正常返回 True'''
ret = os.system("ping -c 1 -W 1 %s > /dev/null" % addr)
if ret == 0:
return True
else:
return False
def power_220v_is_ok():
'''ping 指定ip,判断220v市电是否正常'''
if ping(config['220v_ip1']) or ping(config['220v_ip2']):
return True
else:
return False
def network_is_ok():
'''ping 指定外网IP 判断网络是否正常'''
if ping(config['network_ip1']) or ping

本文介绍了如何在软路由上部署OpenWRT,通过配置实现停电自动关机和网络故障恢复。Python脚本监控市电和网络状态,当检测到异常时自动重启OpenWRT或整个ESXi系统。关键配置包括ping检测次数和重启策略。

7497

被折叠的 条评论
为什么被折叠?



