[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
- daemon em shell script.,
Fernando Lemes da Silva <=