[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
"""
|