Зависание скрипта в момент его выполнения
При выполнение скрипта происходит опрос ряда ip адресов которые берутся с БД. При подключении на ip адрес отправляется команда на устройство которое находится под этим ip и ответ полученной команды пишется в лог файл. Скрипт начинает виснуть при опросе 259 ip адреса по счету и если скрипт перезапустить с этого ip и до последнего то все проходит как не в чем и не бывало. У кого есть решение данной проблемы?
Сам скрипт:
# !/usr/bin/python3
import pypyodbc
import paramiko
import os
from datetime import datetime
def createLogFile( fileName, data):
with open(fileName, 'a') as File:
File.write(data)
File.write("\n")
def get_all_logs(file_name, bdData):
good = []
good.append("\t\tONLINE\n")
bad = []
bad.append("\t\tOFF-LINE\n")
data = []
for x in bdData:
data.append(x)
for i in range(0, len(data)):
tmp_data = get_logg(data[i][0], data[i][1])
print(data[i][1], data[i][0])
if tmp_data.__contains__("ONLINE"):
good.append(tmp_data[9:])
else:
bad.append(tmp_data)
with open(file_name, 'a') as File:
File.writelines(good)
File.writelines(bad)
def get_logg(ip, magaz):
try:
tmp_str = ''
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=ip, username='admin', password='admin', port=22, timeout=5, auth_timeout=5, banner_timeout=5)
stdin, stdout, stderr = client.exec_command('system package update check-for-updates')
data = stdout.read() + stderr.read()
log = [data]
tmp_str += ("\n\t\tONLINE\n")
tmp_str += (magaz)
tmp_str += ("\n")
tmp_str += ("IP - " + ip);
tmp_str += ("\n")
for i in log:
#print('Done!\n')
tmp = str(i).split(' ');
tmp_str += (tmp[6][:-4] + '\n')
tmp_str += (tmp[7][:-4] + '\n')
tmp_str += ((tmp[22][:-4]).lstrip() + '\n')
except Exception as e:
tmp_str += ("\n\t\tOFF-LINE\n")
tmp_str += (magaz)
tmp_str += ("\n")
tmp_str += ("IP - " + ip);
tmp_str += ("\n")
error_log=str(e)
print (error_log + '\n')
finally:
client.close()
return tmp_str
def getAllIpAndNameFromDataBase():
connection = pypyodbc.connect(
'Driver={SQL Server};'
'Server=СЕРВЕР;'
'Database=БД;'
'uid=ЛОГИН;'
'pwd=ПАРОЛЬ;'
)
curson = connection.cursor()
mySQLQuery = ("""
ЗАПРОС В БД
""")
curson.execute(mySQLQuery)
results = curson.fetchall()
connection.close()
return results
def writeIpAndNameToFile(fileName, data):
with open(fileName, 'w') as File:
for i in data:
File.writelines(str(i[0]) + ':' + str(i[1]) + '\n')
def readIpAndNameFromFile(fileName):
data = []
with open(fileName, 'r') as File:
for i in (File.readlines()):
tmp = i.split(':')
tmp[-1]
tmp[1] = tmp[1].replace('\n', '')
data.append(tmp)
return data
if __name__ == '__main__':
# file_name = str(datetime.now().strftime("%d-%m-%Y %H-%M-%S")) + ".txt"
# get_all_logs(file_name)
writeIpAndNameToFile('host.txt', getAllIpAndNameFromDataBase())
# print(readIpAndNameFromFile('host.txt'))
folderName = 'Mikrotik_Log'
try:
os.mkdir(folderName)
except OSError:
folderName
else:
folderName
file_name = str(datetime.now().strftime('Mikrotik_Log' + "/%d-%m-%Y %H-%M-%S")) + ".txt"
get_all_logs(file_name,readIpAndNameFromFile('host.txt') )