73 lines
2.5 KiB
Plaintext
73 lines
2.5 KiB
Plaintext
|
import socket
|
||
|
import subprocess
|
||
|
import time
|
||
|
import os
|
||
|
import paramiko
|
||
|
|
||
|
# 配置参数
|
||
|
ip_file = "C:/Users/andin/Desktop/ip.txt" # 存放IP地址的文件
|
||
|
timeout_threshold = 6 # 超过这个时间(秒)就重启
|
||
|
ssh_host = "192.168.234.143" # Linux 服务器的 IP 地址
|
||
|
ssh_user = "root" # SSH 用户名
|
||
|
ssh_password = "qwer1234" # SSH 密码
|
||
|
|
||
|
def load_ips(filename):
|
||
|
print("加载 IP 地址...")
|
||
|
if not os.path.exists(filename):
|
||
|
print(f"文件 {filename} 不存在。")
|
||
|
return []
|
||
|
with open(filename, 'r') as f:
|
||
|
ips = [line.strip() for line in f if line.strip()]
|
||
|
print(f"加载的 IP 地址: {ips}")
|
||
|
return ips
|
||
|
|
||
|
def test_port(ip, port=80):
|
||
|
start_time = time.time()
|
||
|
print(f"尝试连接到 {ip}:{port}...")
|
||
|
try:
|
||
|
with socket.create_connection((ip, port), timeout=timeout_threshold) as sock:
|
||
|
request = f"GET / HTTP/1.1\r\nHost: {ip}\r\n\r\n".encode()
|
||
|
sock.sendall(request)
|
||
|
sock.recv(1024) # 读取响应
|
||
|
response_time = time.time() - start_time
|
||
|
print(f"成功连接到 {ip}:{port},响应时间为 {response_time:.2f} 秒")
|
||
|
return response_time
|
||
|
except socket.timeout:
|
||
|
print(f"连接到 {ip}:{port} 超时。")
|
||
|
return None
|
||
|
except Exception as e:
|
||
|
print(f"连接到 {ip}:{port} 出错 - {e}")
|
||
|
return None
|
||
|
|
||
|
def restart():
|
||
|
try:
|
||
|
print("通过 SSH 执行重启命令...")
|
||
|
client = paramiko.SSHClient()
|
||
|
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||
|
client.connect(ssh_host, username=ssh_user, password=ssh_password)
|
||
|
stdin, stdout, stderr = client.exec_command("sudo reboot")
|
||
|
print(stdout.read().decode())
|
||
|
print(stderr.read().decode())
|
||
|
client.close()
|
||
|
print("重启命令执行成功。")
|
||
|
except Exception as e:
|
||
|
print(f"执行重启命令时出错: {e}")
|
||
|
|
||
|
def main():
|
||
|
try:
|
||
|
ip_list = load_ips(ip_file)
|
||
|
for ip in ip_list:
|
||
|
print(f"正在测试 {ip} 上的端口 80...")
|
||
|
response_time = test_port(ip)
|
||
|
if response_time is None or response_time > timeout_threshold:
|
||
|
print(f"{ip} 的响应时间超过阈值或不可达。正在重启...")
|
||
|
restart()
|
||
|
else:
|
||
|
print(f"{ip} 的响应时间为: {response_time:.2f} 秒")
|
||
|
except Exception as e:
|
||
|
print(f"主函数执行出错: {e}")
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
print("脚本开始执行...")
|
||
|
main()
|