【软路由】esxi 配合UPS停电自动关机,网络异常自动重启openwrt虚拟机

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

一、运行环境

软路由上跑了 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值