Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 16, 2018 12:04:36

Dim
Зарегистрирован: 2018-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

наваял скрипт переноса бэкапов с сервера бэкапирования в одной сети на хранилище в другой, использовал модуль paramiko и протокол sftp:
import os
import datetime
import paramiko

def FileNotFoundError():
IOError

def send_f(lpth,rpth,fl):
host = ‘192.168.1.100’
port = 22
transport = paramiko.Transport((host, port))
transport.connect(username='admin', password='admin')
sftp = paramiko.SFTPClient.from_transport(transport)
l_pth = lpth + fl
sftp.put(l_pth, os.path.join(rpth, fl))
sftp.close()
transport.close()

path =
rpath =
dt = datetime.date.today()
d = str(dt.day) + “.0” + str(dt.month) + “.” + str(dt.year)
log_f = open(“log_backup_cleaner.txt”,“w”)
h = “clean date ” + d + “\n”
log_f.write(h)
for p in range(4):
for root, dirs, files in os.walk(path):
for grp in files:
try:
m = int(grp)
except ValueError:
continue
if int(grp) == dt.year:
if m == dt.month:
continue
elif 0 < m < (dt.month - 2):
for i in :
fname = grp + i + grp
try:
send_f(path,rpath,grp)
os.remove(path + grp)
except OSError:
continue
log_f.write(grp+“\n”)
else:
continue
elif int(grp) == (dt.year - 1):
if 1 < m <= 12:
for i in :
foname = grp + i + grp
try:
send_f(path,rpath,grp)
os.remove(path + grp)
except OSError:
continue
log_f.write(grp+“\n”)
else:
try:
os.remove(path + grp)
except OSError:
continue
log_f.close()

проблема в том, что через какое-то количество итераций и перенесённых файлов скрипт валится с ошибками модуля транспорт paramiko. например:
No handlers could be found for logger “paramiko.transport”
Traceback (most recent call last):
File “./delOld.py”, line 40, in <module>
send_f(path,rpath,grp)
File “./delOld.py”, line 15, in send_f
sftp.put(l_pth, os.path.join(rpth, fl))
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 759, in put
return self.putfo(fl, remotepath, file_size, callback, confirm)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 717, in putfo
reader=fl, writer=fr, file_size=file_size, callback=callback
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 679, in _transfer_with_callback
writer.write(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/file.py”, line 405, in write
self._write_all(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/file.py”, line 522, in _write_all
count = self._write(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_file.py”, line 200, in _write
data,
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 837, in _async_request
self._send_packet(t, msg)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp.py”, line 198, in _send_packet
self._write_all(out)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp.py”, line 164, in _write_all
raise EOFError()
или вот так:
No handlers could be found for logger “paramiko.transport”
Traceback (most recent call last):
File “./delOld.py”, line 40, in <module>
send_f(path,rpath,grp)
File “./delOld.py”, line 12, in send_f
transport.connect(username='admin', password='admin')
File “/usr/local/lib/python2.7/dist-packages/paramiko/transport.py”, line 1218, in connect
self.start_client()
File “/usr/local/lib/python2.7/dist-packages/paramiko/transport.py”, line 587, in start_client
raise e
paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
root@SRV-NAS:~/Python# python ./delOld.py
No handlers could be found for logger “paramiko.transport”
Traceback (most recent call last):
File “./delOld.py”, line 40, in <module>
send_f(path,rpath,grp)
File “./delOld.py”, line 13, in send_f
sftp = paramiko.SFTPClient.from_transport(transport)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 170, in from_transport
return cls(chan)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 132, in __init__
raise SSHException(“EOF during negotiation”)
paramiko.ssh_exception.SSHException: EOF during negotiation

Посоветуйте что-нибудь. Имеет ли смысл запускать каждую функцию переноса файла в отдельном потоке?

Офлайн

#2 Ноя. 16, 2018 12:17:10

vanvanov
Зарегистрирован: 2013-03-31
Сообщения: 252
Репутация: +  4  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

rsync чем не устроил? Не знаю как в вашем случае, но вообще он умеет с машины на машину копировать. Да и барракуды всякие есть.

Отредактировано vanvanov (Ноя. 16, 2018 12:18:07)

Офлайн

#3 Ноя. 16, 2018 12:23:15

Dim
Зарегистрирован: 2018-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

vanvanov
rsync чем не устроил? Не знаю как в вашем случае, но вообще он умеет с машины на машину копировать. Да и барракуды всякие есть.

Копирую на NAS для домашнего использования QNAP. Там слишком усечённый Линукс.

Офлайн

#4 Ноя. 16, 2018 13:27:43

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

https://pypi.org/project/pysftp/ - может так полегче будет

Офлайн

#5 Ноя. 16, 2018 14:39:52

Dim
Зарегистрирован: 2018-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

VadimK
https://pypi.org/project/pysftp/ - может так полегче будет

спасибо , попробую.

Офлайн

#6 Ноя. 16, 2018 14:43:00

Dim
Зарегистрирован: 2018-11-16
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Перенос бэкапов на linux по stfp

Добавил в функцию строку paramiko.util.log_to_file('paramiko.log')
Падает через час с ошибкой:
Traceback (most recent call last):
File “./delOld.py”, line 41, in <module>
send_f(path,rpath,grp)
File “./delOld.py”, line 16, in send_f
sftp.put(l_pth, os.path.join(rpth, fl))
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 759, in put
return self.putfo(fl, remotepath, file_size, callback, confirm)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 717, in putfo
reader=fl, writer=fr, file_size=file_size, callback=callback
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 679, in _transfer_with_callback
writer.write(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/file.py”, line 405, in write
self._write_all(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/file.py”, line 522, in _write_all
count = self._write(data)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_file.py”, line 200, in _write
data,
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp_client.py”, line 837, in _async_request
self._send_packet(t, msg)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp.py”, line 198, in _send_packet
self._write_all(out)
File “/usr/local/lib/python2.7/dist-packages/paramiko/sftp.py”, line 164, in _write_all
raise EOFError()
EOFError

похоже реально проще переписать на другом модуле

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version