FTP上有系統的登錄日誌,日誌是三臺服務器傳上去的,日誌名稱一致並且名稱用日期命名,日誌放在不同的文件夾下面。該腳本每天早上8點半去FTP下載日誌。希望該文檔可以幫助你。
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import time
import datetime
from ftplib import FTP
import logging
import os
logger=logging.getLogger()
logger.setLevel(logging.DEBUG)
fh=logging.FileHandler('logs.txt',mode='a')
formatter = logging.Formatter('%(asctime)s[line:%(lineno)d]-%(levelname)s: %(message)s')
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
if not os.path.exists('download'):
os.makedirs('download')
def ftp_connect():
try:
ftp_server = '127.0.0.1'
username = 'www' # 用戶名
password = 'password' # 密碼
ftp = FTP()
ftp.connect(ftp_server, 21)
ftp.login(username, password)
except Exception as e:
logger.error("FTP連接失敗 %s"%e)
else:
return ftp
def download_file(filename,localname):
ftp = ftp_connect()
if ftp:
if not os.path.exists(localname):
logger.info("開始下載%s"%(filename))
try:
ftp.nlst(filename)
except Exception as e:
logger.error("%s文件不存在"%filename)
else:
try:
bufsize = 1024
fp = open(localname, 'wb')
ftp.retrbinary('RETR ' + filename, fp.write, bufsize)
fp.close()
ftp.quit()
logger.info("下載%s成功"%filename)
except Exception as f:
logger.error("下載%s失敗"%filename)
h=8
m=30
while True:
yesterday=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y-%m-%d")
yesterday2=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime("%Y%m%d")
log='login.log_%s.log'%(yesterday)
file=['/logs/101/%s'%log,'/logs/102/%s'%log,'/logs/103/%s'%log]
for i in file:
local="download/"+i.split('/')[-2]+"_"+i.split('/')[-1]
download_file(i,local)
while True:
now = datetime.datetime.now()
if now.hour == h and now.minute == m:
break
else:
time.sleep(20)
# logger.info("正常運行")