应用python检测程序运行状态并打印日志文件到本地
import paramiko
import logging
import time
# 配置日志记录
logging.basicConfig(filename='remote_monitor.log', level=logging.INFO, format='%(asctime)s %(message)s')
def remote_monitor_process(hostname, username, password, process_name, total_duration=None, max_retries=3):
start_time = time.time()
elapsed_time = 0
retry_count = 0
while total_duration is None or elapsed_time < total_duration:
try:
# 建立SSH连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, username=username, password=password)
while total_duration is None or elapsed_time < total_duration:
# 执行命令获取进程信息
stdin, stdout, stderr = ssh.exec_command("ps -ef | grep {}".format(process_name))
output = stdout.read().decode('utf-8')
# 如果进程信息中存在指定名称的进程,则记录状态
if process_name in output:
logging.info('Process is running')
else:
logging.info('Process not found')
time.sleep(1) # 间隔一秒钟进行检查
elapsed_time = time.time() - start_time
ssh.close()
except paramiko.ssh_exception.SSHException:
if retry_count < max_retries:
retry_count += 1
logging.info('Connection error. Reconnecting... (Retry {}/{})'.format(retry_count, max_retries))
time.sleep(60) # 等待60秒后尝试重新连接
else:
logging.info('Max connection retries reached. Exiting...')
break
# 远程主机信息
hostname = 'hostname'
username = 'username'
password = 'password'
# 要监控的程序名称
process_name = 'process_name'
# 总执行时长(秒),设置为None表示无限执行
total_duration = None
# 最大重连次数
max_retries = 3
remote_monitor_process(hostname, username, password, process_name, total_duration, max_retries)