[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/
- daemon em shell script., Fernando Lemes da Silva, 2004/01/31
- Re: [shell-script] daemon em shell script.,
moysespr <=