我试图每天从我的服务器下载备份文件到我的本地存储服务器,但我遇到了一些问题。
我写了这段代码(删除了无用的部分,作为电子邮件功能):
import os
from time import strftime
from ftplib import FTP
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders
day = strftime("%d")
today = strftime("%d-%m-%Y")
link = FTP(ftphost)
link.login(passwd = ftp_pass, user = ftp_user)
link.cwd(file_path)
link.retrbinary('RETR ' + file_name, open('/var/backups/backup-%s.tgz' % today, 'wb').write)
link.delete(file_name) #delete the file from online server
link.close()
mail(user_mail, "Download database %s" % today, "Database sucessfully downloaded: %s" % file_name)
exit()
我用crontab运行它,比如:
40 23 * * * python /usr/bin/backup-transfer.py >> /var/log/backup-transfer.log 2>&1
它可以处理小文件,但是备份文件(大约1.7Gb)会冻结,下载的文件会得到大约1.2Gb,然后永远不会增长(我等了大约一天),日志文件是空的。
知道吗?
备注:im使用Python2.6.5
您可以尝试设置超时。从docs:
我用ftplib实现了代码,它可以监视连接,重新连接,并在失败时重新下载文件。详情如下:How to download big file in python via ftp (with monitoring & reconnect)?
抱歉,如果我回答自己的问题,但我找到了解决办法。
我尝试了很多方法,但没有成功,所以我尝试了很多方法,最后,这个方法奏效了:
在我的日志文件中,我发现:
遗憾的是,即使文件已经完全下载,我也必须重新连接到FTP,这在我的cas中不是问题,因为我还必须下载md5sum。
如您所见,我无法检测到超时并重试连接,但当我获得超时时,我只是重新连接;如果有人知道如何在不创建新ftplib.FTP实例的情况下重新连接,请告诉我;)
相关问题 更多 >
编程相关推荐