Arquivo de maio, 2010

LogRotate para Apache (on Windows) ;)

Posted in Programação, Python, Tecnologia, Windows with tags , , on 17 de maio de 2010 by fchevitarese

Opa!!!

Bom, criei este post para compartilhar um script que desenvolvi, para resolver um problema que eu venho tendo com alguns servidores rodando apache no Windows.

Os logs de acesso, erro etc, ficavam gigantes, e o apache ficava uma tartaruga. Arquivos com mais de 100 mb e o apache já agachava. Como não encontrei nada de “log rotate” para o Apache utilizando o Windows, resolvi fazer tal script parar resolver meu problema.

Depois de pronto, basta colocar no agendador de tarefas do Windows para executar diáriamente, ou conforme a sua demanda … Vamos por parte.  Primeiro vou explicar mais detalhadamente o problema ;)

Um servidor com Apache rodando no Windows. Seus arquivos de log chegaram a incrivelmente 20 GB. Com 300MB o apache já agacha… Portanto, o serviço tornou-se instável para não dizer que ele deixou de funcionar completamente.
O que eu precisava? Precisava de um serviço para fazer um logrotate como existe para Linux, porém, posso não ter procurado direito, mas não encontrei uma solução pronta para Windows.
Portanto, decidi fazer o script que é iniciado diáriamente pelo “Agendador de tarefas” do Windows, que vai lá na pastinha onde ficam os logs do Apache e verifica o tamanho dos arquivos de log. No meu caso, eu limitei a 10MB e está de bom tamanho pra mim 😉
Se encontrar arquivos de log que tenham mais de 10MB, ele para o serviço do Apache (o que é necessário pois enquanto o Apache funciona, os arquivos não podem ser editados), e compacta os arquivos encontrados em um arquivo “.tar.bz2” .
Depois de efetuar a compactação, ele apaga os arquivos “gigantes” e cria novos arquivos com o mesmo nome (necessários para o funcionamento do Apache) e inicia o serviço.

Bom, acho que o problema ficou bem explicado né 😉
Vale lembrar que estou falando de Apache, mas o trecho de código que utilizei para parar o serviço pode ser utilizado com qualquer serviço do Windows ok 😉

Então vamos lá… Vamos explicar as funções, e depois no fim do post, irei colocar o arquivo para download… Quem quiser me da R$ 10,00 obrigado porque as contas estão atrasadas 😉 – Brincadeira…

Primeiro os imports:

# -*- coding: utf-8 -*-
import os
import sys
import socket
import time
import datetime
import glob
import win32serviceutil
import tarfile
from stat import *

Agora, vamos as nossas variáveis:

tDate = datetime.datetime.now()
workDir = "C:\\Arquivos de programas\\Apache Group\\Apache2\\logs\\"
fileList = []
destinationfile = workDir + "BackupLogsApache-" + str(tDate.day) + "-" + str(tDate.month) + "-" + str(tDate.year) + ".tar.bz2"

MACHINE = socket.gethostname()
SERVICE = 'Apache2'

Explicando:
tDate, eu to pegando a data na hora que executo o scripts…
workDir é o diretório onde o script irá buscar pelos arquivos …
fileList é a lista onde serão adicionados os nomes dos arquivos maiores que 10MB
destinationfile é o nome do arquivo onde irei salvar os backups…
MACHINE é o nome do computador que está executando o script.
SERVICE é o serviço que iremos manipular 😉

Vamos agora a função que criamos para varrer o diretório:

def getFiles(workdir):
    for folder in glob.glob(workdir):
        for f in glob.glob(folder + "/*.log"):
            filesToRotate = getLogSize(f)
            print filesToRotate
        if filesToRotate:
            service_info('stop', MACHINE, SERVICE)
    compressFiles(filesToRotate, destinationfile)

Esta função busca pelos arquivos de log dentro da pasta especificada e chama a função “getLogSize(f)” passando o nome do arquivo como parâmetro para verificar o tamanho do mesmo. Se o arquivo for maior que 10MB, ele chama a função “service_info” com os parâmetros necessários para parar o serviço.
Depois chama a rotina de compressão dos arquivos…
Vamos ver a rotina de pegar o tamanho do arquivo :

def getLogSize(file_name):
    file_info = os.stat(file_name)
    tamanho = file_info[ST_SIZE]
    if tamanho > 10000:
        fileList.append(file_name)
        return fileList
    return fileList

Agora, a rotina para parar o serviço. O original pode ser encontrado aqui.

def service_info(action, machine, service):
    if action == 'stop':
        win32serviceutil.StopService(service, machine)
        print '%s stopped successfully' %service
    elif action == 'start':
        win32serviceutil.StartService(service) #find a bug in here... Already fixed 😉
        print '%s started successfully' %service
    elif action == 'restart':
        win32serviceutil.RestartService(service, machine)
        print '%s restarded successfully' %service
    elif action == 'status':
        if win32serviceutil.QueryServiceStatus(service, machine)[1] == 4:
            print '%s running normally' %service
        else:
            print '%s is NOT running' %service

Agora, a rotina para compactar os arquivos 😉

def compressFiles(file_list, destination_file):
    try:
        tar = tarfile.open(destination_file, "w:bz2")
        for f in file_list:
            tar.add(f, os.path.basename(f))
            os.remove(f)
            if createNewFile(os.path.basename(f)):
                print "Success !!! Rotation complete ;)"
       tar.close()
       service_info('start', MACHINE, SERVICE)
   except Exception, e:
       print "Ocorreu um erro - %s" %e

Explicando: Esta rotina compacta os arquivos encontrados, e após isto, remove os mesmo e chama a rotina para criar novamente os arquivos vazios. Depois, ela chama novamente a rotina que manipula os serviços para restartar o serviço especificado 😉
Vamos a rotina de criação do novo arquivo:

def createNewFile(file_name):
    try:
        fileHandle = open(workDir + file_name, "w")
        fileHandle.close
        return True
    except Exception, e:
        print e
        return False

Pronto! acabou nosso script.

Bom, futuramente, quero fazer umas verificações para confirmar se o serviço foi iniciado mesmo, e se não, ele disparar uma rotina que envia um e-mail avisando que não conseguiu iniciar o serviço.

Por enquanto é só! Sei que não sou ainda um computólogo, nem mesmo um super pythonista, portanto, várias rotinas e funções podem e devem ser melhoradas.

Para o que eu preciso, já está me atendendo 😉

Qualquer dúvida pergunta aí… Ops… O arquivo né… Segue o link abaixo 😉

Dependências:

pywin32

LINK

Abraços!

Mudando de assunto – Dengue no Brasil

Posted in Inutilidades, Tecnologia on 11 de maio de 2010 by fchevitarese

Gente, mudando totalmente de assunto, gostaria de comentar à respeito da notícia que ouvi e li hoje pela manhã.

Os casos de dengue no Brasil aumentaram 109% …
PQP… Isso é osso! Eu tive dengue este ano e não recomendo a ninguém.
Acho também que isto é uma questão pública, mas que passa também pela atenção e principalmente cooperação de todos nós.

Porque digo isto? Digo isto porque não adianta nada fumacês, visitas em casa, se seu vizinho não limpa os vasos com água, não tampa a caixa d´água e tudo mais.
Se não agirmos juntos, esta epidemia só vai aumentar…
Acho que o governo deveria tomar medidas mais severas junto as pessoas que forem “pegas” com focos de dengue em casa, pois convenhamos, com todo o tipo de informação que temos hoje, é inaceitável que alguém não tome as devidas providências para que seu lote, casa, apartamento, enfim, qualquer lugar que lhe pertença não seja um foco de dengue.

Temos que acabar com isto! Lotes vagos com lixo, vasos de plantas descuidados. Isto não pode acontecer.
Não adianta como eu falei acima, fumacês e afins… Temos que fazer a nossa parte. Um mosquito, que pra mim não serve de porr#@!# nenhuma, além de encher o saco, provocar coceiras com suas picadas e transmitir todo tipo de doença “from hell” não pode continuar infectando milhares de pessoas como temos visto.

Segue uma imagem retirada do G1.com.br ilustrando os casos em todo Brasil:

Enfim, vamos colocar a mão na consciência e parar de colocar a culpa nos governos. A culpa deve ser repartida entre o povo e o governo, e na minha humilde opinião, acho que a maior fatia desta culpa é nossa!

Vamos fazer nossa parte !!!

Abraços!

AMD anuncia processador com 6 núcleos… WooooW …

Posted in Inutilidades, Tecnologia with tags , , on 3 de maio de 2010 by fchevitarese

Olha… Eu tenho apenas um AMD Athlon X2 5200+, com míseros 2 núcleos…

Fiquei animado com esta notícia! Depois de muito tentar comprar um processador Phenom x4, parece que agora vou começar a juntar as moedas para adquirir um x6 😉

Mais uma boa notícia para os fissurados em jogos e novidades.

Se o X2 já é bão di mais da conta, imaginem o X6…

Segue o link do post original: link

Abraços!

Recebi por e-mail ( Atualizando seu Ubuntu )

Posted in Linux, Tecnologia with tags , , on 3 de maio de 2010 by fchevitarese

Opa!!!

Lançada a nova versão do Ubuntu, já estamos ansiosos para fazermos a nossa atualização. Mas sempre fica aquela pulga atrás da orelha…

  • Será que vai tudo funcionar corretamente?
  • Será que não vai ser difícil a atualização?
  • Vai manter meus drivers?

Na realidade, não posso atestar e nem mesmo garantir que tudo será um “mar de rosas”.

O Ubuntu desde a versão 9.04 (foi a que utilizei tal recurso) tem no update manager uma maneira muito fácil para fazer a atualização da sua distribuição. No meu caso, atualizei do 9.04 para o 9.10 sem maiores problemas, mantendo até mesmo os drivers proprietários anteriormente instalados 😉

Bom, enfim, eu não fiz um passo a passo, mas alguém fez. Segue então o link para quem está afim de atualizar seu Ubuntu e está com a pulga atrás da orelha 😉

Passo a passo …

Abraços!!!