55 lines
1.9 KiB
Smarty
55 lines
1.9 KiB
Smarty
#!/usr/bin/env python3
|
|
# -*- coding: UTF-8 -*-
|
|
# Auto-generated from template. DO NOT EDIT DIRECTLY!
|
|
# Device: {device_name} ({device_id})
|
|
|
|
import time
|
|
import logging
|
|
import os
|
|
import socket
|
|
import sys
|
|
|
|
# ====== 配置参数(从配置文件读取)======
|
|
TARGET_IP = '{tms_server_ip}'
|
|
TARGET_PORT = {listen_port}
|
|
LOG_FILE = '{base_dir}/log/crond-{device_id}.log'
|
|
RESTART_COMMAND = "{python_path} {base_dir}/bin/{device_id}.py &"
|
|
DEVICE_ID = '{device_id}'
|
|
# =========================
|
|
|
|
ISOTIMEFORMAT = '%Y-%m-%d %X'
|
|
|
|
logging.basicConfig(filename=LOG_FILE, filemode="a", level=logging.DEBUG,
|
|
format='%(asctime)s - %(levelname)s - %(message)s', datefmt=ISOTIMEFORMAT)
|
|
|
|
|
|
def is_port_open(ip, port):
|
|
"""检查指定IP和端口是否可达"""
|
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
|
s.settimeout(1)
|
|
try:
|
|
logging.debug(f"尝试连接到 {{ip}}:{{port}}...")
|
|
s.connect((ip, int(port)))
|
|
s.shutdown(socket.SHUT_RDWR)
|
|
print(f"[{{DEVICE_ID}}] 端口 {{port}} is open")
|
|
logging.info(f"端口 {{port}} is open")
|
|
return True
|
|
except (OSError, socket.timeout) as e:
|
|
print(f"[{{DEVICE_ID}}] 端口 {{port}} is down")
|
|
logging.warning(f"端口 {{port}} 检查失败: {{e}},尝试重启程序")
|
|
logging.info(f"执行重启命令: {{RESTART_COMMAND}}")
|
|
os.system(RESTART_COMMAND)
|
|
return False
|
|
except ValueError:
|
|
print(f"错误: 端口 '{{port}}' 不是有效的数字。")
|
|
logging.error(f"端口 '{{port}}' 不是有效的数字。")
|
|
return False
|
|
finally:
|
|
s.close()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
logging.info(f"[{{DEVICE_ID}}] 启动端口检查程序,检查 {{TARGET_IP}}:{{TARGET_PORT}}")
|
|
print(f"[{{DEVICE_ID}}] 启动端口检查程序,检查 {{TARGET_IP}}:{{TARGET_PORT}}")
|
|
is_port_open(TARGET_IP, TARGET_PORT)
|