[i=s] 本帖最后由 ㅤㅤㅤ_Duwe2 于 2025-1-22 20:32 编辑 [/i]<br />
<br /> 
[i=s] 本帖最后由 ㅤㅤㅤ_Duwe2 于 2025-1-22 20:31 编辑 [/i] 
[i=s] 本帖最后由 ㅤㅤㅤ_Duwe2 于 2025-1-22 20:28 编辑 [/i] 
[i=s] 本帖最后由 ㅤㅤㅤ_Duwe2 于 2025-1-22 14:35 编辑 [/i] 
背景: 
家里威联通、群晖、飞牛都在用,UPS共用山克的,威联通直连UPS,群晖和飞牛使用脚本检测威联通是否关机,设置定时任务1分钟执行1次,累计10次ping不通威联通,执行关机操作。 
代码里面的**是g _ m 中间没空格 
脚本内容: 
import subprocess
import os
import json
import atexit
import logging
import platform
# 配置日志记录
logging.basicConfig(filename='/vol1/1000/app/pin**onitor/logs/pin**onitor.log', level=logging.INFO,
                    format='%(asctime)s - %(levelname)s - %(message)s')
def ping_ip(ip):
    """
    尝试ping指定的IP地址,返回ping的结果(成功或失败)。
    """
    try:
        if platform.system() == 'Windows':
            result = subprocess.run(['ping', '-n', '2', ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        else:
            result = subprocess.run(['ping', '-c', '2', ip], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        if result.returncode == 0:
            return True
        else:
            return False
    except Exception as e:
        logging.error(f"Error occurred while pinging {ip}: {e}")
        return False
def save_failure_count(failure_count):
    """
    将失败次数保存到JSON文件中。
    """
    try:
        with open('ping_failure_count.json', 'w') as f:
            json.dump({'count': failure_count}, f)
    except Exception as e:
        logging.error(f"Error occurred while saving failure count: {e}")
def load_failure_count():
    """
    从JSON文件中加载失败次数。
    """
    try:
        with open('ping_failure_count.json', 'r') as f:
            data = json.load(f)
            return data.get('count', 0)
    except FileNotFoundError:
        return 0
    except Exception as e:
        logging.error(f"Error occurred while loading failure count: {e}")
        return 0
def shutdown_system():
    """
    根据当前操作系统类型执行关机命令。
    """
    if platform.system() == 'Windows':
        os.system('shutdown /s /t 0')
    else:
        os.system('shutdown -h now')
if __name__ == "__main__":
    target_ip = '10.77.19.6'  # 请替换为你要ping的IP
    failure_count = load_failure_count()
    if not ping_ip(target_ip):
        failure_count += 1
    else:
        failure_count = 0
    if failure_count >= 10:
        logging.error(f"Failed to ping {target_ip} for 10 consecutive times. Shutting down the system...")
        shutdown_system()
    else:
        logging.info(f"Ping result: {'success' if failure_count == 0 else 'failure'}, current failure count: {failure_count}")
    atexit.register(save_failure_count, failure_count)
"""
mkdir /vol1/1000/app/pin**onitor/
mkdir /vol1/1000/app/pin**onitor/logs
cd /vol1/1000/app/pin**onitor/logs
chmod +x pin**onitor.py
crontab -e
* * * * * /usr/bin/python3 /vol1/1000/app/pin**onitor/pin**onitor.py
"""
  |