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

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

Re: [shell-script] Novo script de verificação de size.


From: Felipe Kellermann
Subject: Re: [shell-script] Novo script de verificação de size.
Date: Mon, 16 Feb 2004 22:42:46 -0300 (BRT)

On Mon, 16 Feb 2004 4:54pm  -0000, anali_abreu wrote:

> cd /metrica/tmp/logs
>
> ARQ = b.log , c.log  (??????)

Aqui tu deveria usar os parâmetros: $*, que é a lista de parâmetros.
Chamando `meu_script b.log c.log', este '$*' fica 'b.log c.log'.

> for $ARQ
> do
> SIZE=`wc -c "${ARQ}" | awk '{ print $1 }'`
> if [ "${SIZE}" -ge "1000000000" ]

Se tu quer pegar >= 1G, 1000000000 não está correto. Talvez isto tu já
saiba (se tu é da área da computação), mas 1G é 2^30. Ou 2^30/512, se
pensarmos em blocos, que é obviamente a forma mais elegante, prática e
padrão. Vamos fazer um ambiente de teste:

$ dd if=/dev/zero of=c.log count=2097152
$ touch {a,b}.log
$ ls
total 1049604
      0 -rw-r--r--  1 0          0 Feb 16 21:37 a.log
      0 -rw-r--r--  1 0          0 Feb 16 21:37 b.log
1049604 -rw-r--r--  1 0 1073741824 Feb 16 21:34 c.log

Temos três arquivos e apenas 1 que já tem (exatamente) 1G.
Vamos tentar encontrar ele:

$ find . -size +2097151 -print
./c.log

Observe que usamos +(2^30 / 512 - 1), queremos >= 1G, afinal. Se alguém te
indicar +1048576K ou +1024M ou +1G, está errado. Além de errado, sempre é
bom lembrar que estes sufixos _não_ são padrões -- é uma extensão GNU.

> rm -f ${ARQ}
> touch ${ARQ}

Não é necessário fazer um `rm' e depois `touch'. Poderíamos resumir.
Ou um `cat /dev/null > ${ARQ}', ou `> ${ARQ}', ou como quiser.

> echo "O arquivo ${ARQ} ainda nao atingiu o tamanho limite." >email
> mail -s SizeFiles address@hidden < email
>
> fi
> done

Se nós fizéssemos para enviar um mail somente quando algum arquivo foi
zerado, ficaria mais simples (e mais prático), na minha opinião. Eu vou
fazer assim, mas tu pode modificar. 1 variável, 1 pipe e duas linhas, e
poderia ser uma linha: Se tu juntar tudo também vai funcionar:

#!/bin/sh
IFS=, ARQ=$(eval echo /metrica/tmp/logs/{"$*"})
eval find $ARQ -size +2097151 -exec cp /dev/null {} \\\; -print |\
mail -s SizeFiles address@hidden

Procura em `/metrica/tmp/logs/' por todos os arquivos especificados.
Zera todos os arquivos que tenham 1G ou mais e envia um mail avisando.
Fácil de entender, e não _requer_ um sistema GNU/bash para funcionar.
Qualquer dúvida sobre o funcionamento, envia para lista,

-- 
Felipe Kellermann


reply via email to

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