comando shell(urgente)

Iniciado por Marjorie, 30 de Junho de 2008, 11:42

tópico anterior - próximo tópico

Marjorie

Olá!
Necessito com urgencia a solução desta sequencia de comandos.
Trata-se de um sistema crítico, que não pode parar, é necessário verificar constantemente o espaço livre na parição onde encontra-se a pasta /dados. Para isso, a CRON deve estar configurada para enviar um email caso o espaço livre seja menor que 10Gb aos administradores e essa checagem deve ser feita 24h por dia, a cada 10 minutos.
Agradeço desde já   :D

brunei

Olá Majorie,

Você pode obter a quantidade de espaço livre de uma partição, sabendo uma de suas pastas, através do comando df. A linha abaixo pega a quantidade de espaço livre da partição onde encontra-se o diretório /dados, retornando um valor numérico em kilobytes:


df /dados -B 1024 | grep '/dev' | awk '{print $2}'


Daí é só criar um shellscript que atribua esse valor a uma variável e verifique se esse valor é menor que 10000 (10MB), se for, dispara as devidas ações.


LIVRE=`df /dados -B 1024 | grep '/dev' | awk '{print $2}'`
if [ $LIVRE -le 10000 ]; then
    disparar ações!
fi


Quanto ao cron, a linha ficaria parecida com a abaixo, considerando que seu script chama-se alerta.sh:


0-59/10 * * * * alerta.sh


Nota: não estou no Linux agora, então não pude testar todos os comandos.


Até mais!
Bruno Ribeiro

Felix

#2
Já que ela quer em Gb pode-se alterar o parâmetro para:

df /dados -h | grep '/dev' | awk '{print $2}'


ou encurtando:

df /dados -h | awk '{print $2}'


brunei

#3
Nossa, muito obrigado Felix. Eu vi GB, mas coloquei em MB!

Aliás, corrigindo meu post, troque $2 por $4 para obter o valor da coluna certa (coluna Available).

df /dados -B 1024 | grep '/dev' | awk '{print $4}'

Aliás, Felix, se usar

df /dados -h | awk '{print $2}'

como você sugeriu, ocorrerão dois problemas: 1) virão duas linhas, pois o df sempre coloca o título das colunas de dados dele e 2) por causa do -h, virá um valor com uma letra indicando a unidade de medida, o que vai dar problema pois o script precisa comparar valores numéricos (verifica se é igual ou menor que 10GB).


Atualizando, o script poderia ter a comparação


LIVRE=`df /dados -B 1024 | grep '/dev' | awk '{print $4}'`
if [ $LIVRE -le 10000000 ]; then
    disparar ações!
fi


Dá para deixar ele bem melhor que isso. Aliás, eu uso o parâmetro -B 1024 para garantir que o valor que o df me passará será dado em KB. Você pode mudar isso.

Até mais!
Bruno Ribeiro

Felix

Wowwww
eu também nem tinha notado que a coluna estava errada...,

valeu!

clcampos

Caro usuário procure não usar o termo urgente (ou ajuda, ou socorro e etc) no título dos tópico, pois é contra as Regras de Utilização do Fórum.
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

voyeg3r

Um exemplo particular para testar o espaço livre

df -h / | awk '/dev/ {print $4}'
9,3G


A opção '-h' do df corresponde a 'human-readable'
e usei o próprio awk para filtrar ao invés do grep