python写了一个监控端口服务,自动重启的脚本
为了防止以后找不到代码,特别记录一下
import os
import sys
import threading
import timeimport socket
import subprocessdef check_port_and_run_script(port, script_path):# 创建一个socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 设置超时时间sock.settimeout(1)# 尝试连接到指定的端口result = sock.connect_ex(('localhost', port))# 如果连接成功,端口正在被使用if result == 0:print(f"端口 {port} 正在被使用。")else:print(f"端口 {port} 未被使用,正在执行 {script_path} 脚本...")# 执行a.sh脚本subprocess.run(['D:/software/Git/bin/bash.exe', script_path])# subprocess.run(['bash', script_path])# 关闭socketsock.close()def read_cof_file():current_directory = os.getcwd()# 使用glob查找所有.doc文件if os.path.exists(os.path.join(current_directory, 'shany.txt')):with open(os.path.join(current_directory, 'shany.txt'), 'r', encoding='utf-8') as file:# 逐行读取文件内容for line in file:if 'shany-end' in line:print('定时任务已结束')sys.exit(0)elif ':=>' in line:parts = line.split(":=>")check_port_and_run_script(int(parts[0]), parts[1])def timer_task():print("定时器任务执行了!")# check_port_and_run_script(8686, 'D:/WorkSpace/shany/simulator/target/start.sh')read_cof_file()set_timer(20) def set_timer(interval):timer = threading.Timer(interval, timer_task)timer.start()if __name__ == '__main__':# 首次设置定时器set_timer(20)# 主线程可以继续执行其他任务,或者简单地等待定时器执行try:while True:time.sleep(1) # 防止主线程立即退出,可以按需调整或添加其他逻辑except KeyboardInterrupt:print("程序被用户中断")
用来监控的配置文件,shany.txt 内容如下
8686:=>D:/WorkSpace/shany/simulator/target/start.sh
其中8686是端口号, :=> 作为分隔符 ,后面地址对应脚本的所在路径