Script de salvas de logs en servidor proxy
Publicado: Lun, 03 Ene 2011, 12:04
Esta es una versión libre del script de Gaara. Pueden criticar sin piedad(así aprendo).
Código: Seleccionar todo
#! /usr/bin/python
from datetime import datetime
import shutil,subprocess, os, smtplib, gzip, tarfile
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
now = str(datetime.now())
data = {'SERVER_DIR' :'/home/backups/Servers/Virtue',
'WORK_DIR' :'/home/backups/Servers/Virtue/'+now+'.logs/',
'WORK_CREATE' :'/home/backups/Servers/Virtue/'+now+'.logs/1',
'ADMINS' :('kzkggaara@ipichcb.rimed.cu', 'elav@ipichcb.rimed.cu'),
'SMTP_SERVER' :'smtp.ipichcb.rimed.cu'}
def enviar_email(para, subject, texto, smtp_server):
COMMASPACE = ', '
text = MIMEText(texto)
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = 'error@server'
msg['To'] = COMMASPACE.join(para)
msg.attach(text)
s = smtplib.SMTP(smtp_server)
s.sendmail('error@server', para, msg.as_string())
s.quit()
def copiar_archivo(desde, hasta, subject, mensaje_error, data, scp = False):
try:
if scp:
os.system("scp "+desde+' '+hasta)
else:
shutil.copy(desde, hasta)
except IOError as (errno, strerror):
mensaje_error = mensaje_error + '\nI/O error({0}): {1}'.format(errno, strerror)+'\n '+desde+'->'+hasta+'\n El error ocurrio ' + now
enviar_email(data['ADMINS'], subject, mensaje_error, data['SMTP_SERVER'])
return False
return True
def comprimir_dir(directorio, subject, mensaje_error, data):
try:
tar = tarfile.open(now+'.logs.tar', 'w')
tar.add(directorio)
tar.close()
except IOError as (errno, strerror):
mensaje_error = mensaje_error + '\nI/O error({0}): {1}'.format(errno, strerror)+'\n El error ocurrio ' + now
enviar_email(data['ADMINS'], subject, mensaje_error, data['SMTP_SERVER'])
return False
f_in = open(now+'.logs.tar', 'rb')
f_out = gzip.open(now+'.logs.tar.gz', 'wb')
f_out.writelines(f_in)
f_out.close()
f_in.close()
return True
def principal():
if not os.path.exists(data['WORK_CREATE']):
os.mkdir(data['WORK_CREATE'])
os.execlp('/etc/init.d/squid','', 'stop')
mensaje_error = 'La salva de logs del servidor Virtue ha dado ERROR, se adjunta log. '
subject = '[Virtue] | [ERROR] Status de salva de logs.'
flag = copiar_archivo('/var/log/squid/access.*', data['WORK_DIR'], subject, mensaje_error, data)
if not flag:
return
flag = copiar_archivo('/var/log/auth.*', subject, data['WORK_DIR'], mensaje_error, data)
if not flag:
return
os.remove('/var/log/squid/access.*')
os.remove('/var/log/auth.*')
os.execlp('/etc/init.d/squid','', 'start')
open('/var/log/auth.log', 'w')
os.lchown('/var/log/auth.log', 'adm', 'adm')
os.chmod('/var/log/auth.log', 640)
os.chdir(data['SERVER_DIR'])
mensaje_error1 = 'La salva de logs del servidor Virtue ha dado ERROR. Especificamente a la hora de COMPRIMIR el directorio, se adjunta log. '
flag = comprimir_dir(data['WORK_DIR'], subject, mensaje_error1, data)
if not flag:
return
os.remove(data['WORK_DIR'])
flag = copiar_archivo(data['SERVER_DIR']+now+'.logs.tar.gz', 'root@192.168.200.4:/home/backups/Servers/Virtue/', subject, mensaje_error, data, True)
if not flag:
return
subject1 = '[Virtue] | [OK] Status de salva de logs.'
mensaje_error2 = 'La salva de logs del servidor Virtue (192.168.200.3) se ha efectuado satisfactoriamente. \n'+now
enviar_email(data['ADMINS'], subject1, mensaje_error2, data['SMTP_SERVER'])
if __name__ == '__main__':
principal()