shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

daemon em shell script.


From: Fernando Lemes da Silva
Subject: daemon em shell script.
Date: Wed, 28 Jan 2004 16:26:38 -0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; pt-BR; rv:1.0.2) Gecko/20030208 Netscape/7.02


Bom, depois de testar um script durante algum tempo percebi que estou com alguns problemas quanto a performance. Estou tentando roda-lo como um "daemon" que mantem um arquivo com registros de bytes transferidos nas interfaces de rede. O problema é que depois de uns 3 dias rodando a maquina começa a ficar lenta e cerca de 20% de cpu é consumida por causa do script. Alguem saberia me dizer alguma maneira melhor de fazer isso ? Seria melhor eu usar perl, c, ou mesmo php ?

   []'s
   Fernando Lemes

   Segue abaixo o script problematico:

#!/bin/bash
#
# Gerador de log para analise de rede.
#


# Limpa o arquivo de log. Dado que o ciclo é de 1 segundo em um dia
# podem haver no maximo 86400 linhas por interface.

function clean_log_file {
if [ -e /var/log/webtools/mod700d.log -a `wc /var/log/webtools/mod700d.log -l | tr -s ' ' | cut -d ' ' -f2` -gt 86400 ]; then tail /var/log/webtools/mod700d.log -n 86400 > /var/log/webtools/mod700d.log.tmp
    rm -f /var/log/webtools/mod700d.log
    mv    /var/log/webtools/mod700d.log.tmp /var/log/webtools/mod700d.log
  fi
}

# Se o diretorio não existir ele é criado.
if [ ! -d "/var/log/webtools/" ]; then mkdir -p /var/log/webtools/; fi

# Pega uma lista das interfaces ethN que a maquina possui.
interfaces=`/sbin/ifconfig | grep Link | cut -d " " -f 1 | grep lo -v`

# Se o arquivo não existir ele é criado na hora. Caso exista a função
# de limpeza eh chamada.
if [ ! -e "/var/log/webtools/mod700d.log" ]; then
  data=`date +%s`
  for interface in $interfaces; do
echo "$data $interface `/sbin/ifconfig $interface | grep bytes | tr -s " " | cut -d " " -f 3 | cut -d ":" -f 2` `/sbin/ifconfig $interface | grep bytes | tr -s " " | cut -d " " -f 7 | cut -d ":" -f 2` 0 0" >> /var/log/webtools/mod700d.log
  done
else clean_log_file; fi

while [ true ]; do
  todayis=`date +%u`
  # Aqui ele faz um laço que sai toda meia noite para limpeza do log.
  while [ $todayis -eq `date +%u` ]; do
    for interface in $interfaces; do
      data=`date +%s`
      old=`cat /var/log/webtools/mod700d.log | grep $interface | tail -n 1`
      oldrx=`echo $old | cut -d ' ' -f3`
      oldtx=`echo $old | cut -d ' ' -f4`
      new=`/sbin/ifconfig $interface | grep bytes | tr -s ' '`
      newrx=`echo $new | cut -d ' ' -f2 | cut -d ':' -f2`
      newtx=`echo $new | cut -d ' ' -f6 | cut -d ':' -f2`
      difrx=$[$newrx - $oldrx]
      if [ $difrx -lt 0 ]; then difrx=1; fi
      diftx=$[$newtx - $oldtx]
      if [ $diftx -lt 0 ]; then diftx=1; fi
if [ $[$difrx + $diftx] -gt 0 ]; then echo "$data $interface $newrx $newtx $difrx $diftx" >> /var/log/webtools/mod700d.log; fi
    done
    sleep 1
  done
  clean_log_file
done




reply via email to

[Prev in Thread] Current Thread [Next in Thread]