[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RES: [shell-script] Status de Utilizacao do Disco
From: |
Rodolfo Villanova |
Subject: |
RES: [shell-script] Status de Utilizacao do Disco |
Date: |
Thu, 6 Feb 2003 17:36:06 -0200 |
Olá camaradas,
Voltei de férias só agora, 30 dias que me afastei de minhas caixas de
e-mail! Maravilha!
Por isso só agora vou dar meu pequeno pitaco sobre esse assunto, que me
tomou um tempo significativo há quase 1 ano atrás, me forçando a estudar
ainda mais awk e shell.
No início do desafio havia buscado o mesmo caminho do nosso amigo Marco
Eloy, que era o de utilizar somente o awk e colocar os percentuais de
ocupação no próprio corpo do script, mas por sugestão do cliente estruturei
num arquivo-texto, à parte, os nomes das partições e respectivos limites,
acima dos quais o script deveria avisar por "net send" (comando nt) e por
e-mail às caixas-postais e a telefones celulares de plantão.
O script completo funciona sem modificações tanto em ambiente True64
(servidores Compaq) quanto em SunOS 5.8.
Não vou dar de bandeja todo o script aqui (até porque iria perder a graça
pra quem gosta de desafios e quer aprofundar seus conhecimento em
shell-script!), mas informo que elaborei-o de forma que facilitasse a sua
evolução/depuração passo-a-passo; durante a sua execução, o script verifica
se o filesystem superou algum dos limites pré-determinados, e somente envia
nova mensagem de aviso quando o percentual atualizado for superior ao valor
anterior (senão ele fica torrando a paciência com a mesma mensagem a cada
intervalo determinado na cron.
Por questão de elegância de programação, defini os nomes de diretórios no
início do script (por isso aparecem umas variáveis $ARQ_'s no trecho
abaixo), o que facilita uma eventual mudança de localização dos scripts ou
dos arquivos com os limites pré-estabelecidos.
8<----------------------------------------->8
...
# Monta a situacao atual do File System
df -k > $ARQ_LOG
# Formata o resultado do comando `df -k`, filtrando os campos 'Mounted on' e
'Capacity'
awk '{ print $6 ":" $5 }' $ARQ_LOG > $ARQ_DIR
# Verifica se foi ultrapassado algum limite pre-estabelecido
while read -r LIM_NOME LIM_PERC
do
for diretorio in `cat $ARQ_DIR`
do
DIR_NOME=`echo $diretorio | cut -f1 -d":"`
DIR_PERC=`echo $diretorio | cut -f2 -d":" | cut -f1 -d"%"`
if [ "$DIR_NOME" = "$LIM_NOME" ]; then
if [ $DIR_PERC -gt $LIM_PERC ]; then
echo "*** ${DIR_NOME}\t${DIR_PERC}% ***" >>
$ARQ_OUT
fi
fi
done
done < $ARQ_FSL
...
8<----------------------------------------->8
Espero que sirva de inspiração para novas idéias e desafios para quem está
iniciando a exercitar programação shell.
Grato,
Rodolfo Villanova
TmS do Brasil
-----Mensagem original-----
De: Julio Cezar Neves - DATAPREVRJ
[mailto:address@hidden]
Enviada em: terça-feira, 14 de janeiro de 2003 13:35
Para: address@hidden
Assunto: RES: [shell-script] Status de Utilizacao do Disco
Se vc fizer:
df -h | while read fs
vc terá cada linha referente a cada file system dentro de $fs para trabalhar
a vontade.
[ ]s,
Julio Cezar Neves
-Eu Apoio o Software Livre-
-I Support Free Software-
* +55 21 2528-7070 / 9853-4044
*address@hidden
> -----Mensagem original-----
> De: Marco Eloy [mailto:address@hidden]
> Enviada em: terça-feira, 14 de janeiro de 2003 12:25
> Para: address@hidden
> Assunto: RES: [shell-script] Status de Utilizacao do Disco
>
>
> K´ra Nao entendi muito bem o que vc quiz dizer. Na
> verdade primeiro eu
> utilizei o "grep+cut" mas sempre tinha que repetir o comando
> para poder
> exibir a linha inteira, tipo:
> /dev/st2 973M 486M 487M 49% /
> /dev/st3 9.0G 3.0G 6.0G 33% /base
> pois o cut pega uma unica lista de valores por vez e
> poe num vetor, o que
> me impossibilita de pegar duas listas numa unica linha de
> comando. Assim
> tenho que executa-lo duas vezes, uma para pegar o % de uso e
> outra para
> pegar o nome na particao o que na minha opiniao é retrabalho,
> por isso optei
> pelo awk. Entretanto vc me passou duas informacoes que eu
> desconhecia:1ª awk
> nao aceita variaveis shell e 2ª que ele aceita se a variavel
> for passada
> como parametro. Tentei passar a variavel como parametro sem
> sucesso. Como eu
> posso passar a variavel como parametro?
> Em novas tentativas com a dupla grep/cut parei no mesmo
> ponto; execucao
> dupla do mesmo comando. Vc tb acha que soh da pra fazer
> usando grep/cut 2
> vezes? como ficaria na usa opiniao?
>
> Sds
> Marco Eloy
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como
perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
aviso.
---------------------------------------------------------------------
Sair da lista: address@hidden
---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listasdiscussao.cjb.net
---------------------------------------------------------------------
Seu uso do Yahoo! Grupos é sujeito às regras descritas em:
http://br.yahoo.com/info/utos.html
- RES: [shell-script] Status de Utilizacao do Disco,
Rodolfo Villanova <=