【发布时间】:2012-01-09 13:13:24
【问题描述】:
我尝试每天从我的服务器下载一个备份文件到我的本地存储服务器,但我遇到了一些问题。
我写了这段代码(去掉了无用的部分,作为电子邮件功能):
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 然后永远不会增长(我等了大约一天),并且日志文件是空的。
有什么想法吗?
ps:我使用的是 Python 2.6.5
【问题讨论】:
-
要进一步解决问题,也许您可以使用来自
FTP.retrbinary的callback参数来收集有关下载进度的更多信息。此外,使用maxblocksize可能会发现一些网络问题。
标签: python ftp file-transfer