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

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

Re: [shell-script] daemon em shell script.


From: moysespr
Subject: Re: [shell-script] daemon em shell script.
Date: Sat, 31 Jan 2004 07:09:17 -0800 (PST)

Oi Lemes:

Olhei rapidamente, assim se a idéia não se aplicar, ignore.
Seria bom dininuir as operações por ciclo de for. Dai pensei em deixar cada
valor old em memória: oeth0, oeth1,etc.
Só executar operações se houver mudança. Pareceu-me que só há registro no log
nesse caso. Assim:

i=interface
for i
n$i=`/sbin/ifconfig eth0|grep bytes`
[ "n$i" == "o$i" ]||{
comandos se new != old para essa $i
o$i=n$i
}
done

Outras hipóteses/questões:
- se partir a máquina do zero, no primeiro dia, esse esquema funciona bem?
- seria possível usar um valor sleep maior?
- se colocar no cron será será que funcionaria melhor; mas daí o uso de
variáveis que sugiro não serviria.
- tem idéia porque a máquina ao longo do tempo sofre degradação


Se algo mais me ocorrer repassarei. Boa sorte!


--- Fernando Lemes da Silva <address@hidden> wrote:
> 
>     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
> 
> 
> 


__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free web site building tool. Try it!
http://webhosting.yahoo.com/ps/sb/


reply via email to

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