Scrip para monitorar arquivos parados em diretorios??

13. Re: Scrip para monitorar arquivos parados em diretorios??

Leo de Lucas
leodelucas

(usa Debian)

Enviado em 15/01/2008 - 11:25h

Elgio, tudo bem...

usamos o seu script para trabalha exatamente oque precisavamos, da uma olhada como ficou...

agora é que ao invés de somente listar todos arquivos parados que deu alguns milhares de arquivos, queremos altera-lo para que ele de o númedo de arquivos parados e liste o ultimo arquivo e a data mais antiga... é meu amigo acho até que sei oq vc esta pensando, esses iniciantes em shell viu.. "rsrsrs" mas chego lá!


#!/bin/bash

# Configuracoes
tfile=~/time.tmp
dirfile=~/monitoracao/saida.txt

DIR="./" # arquivos de quais dir monitorar?

ESPERA="30" # verificar a cada quantos seguntos?
# ESPERA: para nao gastar muita CPU o script faz a varredura
# e "dorme" por algum tempo (nunca termina). Este tempo eh configurado
# na variavel ESPERA

#ESCREVE="/dev/stdout" # Onde as impressoes irao sair
ESCREVE=/tmp/log.out # Onde as impressoes irao sair
# stdout = saida padrao, como qualquer echo da vida
# Se este programa for executar como daemon recomenda-se filtrar
# todos os echos para um arquivo, por exempo (de log??)
# bara trocar a variavel ESCREVE para um nome de arquivo

function acao ()
{
# Configure aqui o que sera feito quando detectar que o arquivo esta
# parado. Por padrao apenas imprime na tela.
# $1: nome do arquivo
# $2: a quanto tempo ele esta parado

# MIN=$(( $2 / 60 % 60))
# HOR=$(( $2 / 60 / 60))
# SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
# echo "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE

function acao ()
{
# Configure aqui o que sera feito quando detectar que o arquivo esta
# parado. Por padrao apenas imprime na tela.
# $1: nome do arquivo
# $2: a quanto tempo ele esta parado

# MIN=$(( $2 / 60 % 60))
# HOR=$(( $2 / 60 / 60))
# SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
# echo "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE
ESCREVE=/tmp/log.out # Onde as impressoes irao sair
# stdout = saida padrao, como qualquer echo da vida
# Se este programa for executar como daemon recomenda-se filtrar
# todos os echos para um arquivo, por exempo (de log??)
# bara trocar a variavel ESCREVE para um nome de arquivo

function acao ()
{
# Configure aqui o que sera feito quando detectar que o arquivo esta
# parado. Por padrao apenas imprime na tela.
# $1: nome do arquivo
# $2: a quanto tempo ele esta parado

# MIN=$(( $2 / 60 % 60))
# HOR=$(( $2 / 60 / 60))
# SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
# echo "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE
echo "NE: $1, arquivo $2 estah ha mais de 10' parado `ls -lc $2 |awk '{ print $6" " $7" " $8" "; }'`" >> $ESCREVE

}


# Funcao principal

echo "Programa inicio em `date` nos diretorios definidos em $dirfile" >> $ESCREVE
while [ 1=1 ]; do
tme=`date +%m`
tdi=`date +%d`
tho=`date +%H`
tmi=`date +%M`
tse=`date +%S`

echo > $tfile;
if [ $((tmi-10)) -lt 0 ]; then
sleep 10;
fi
tmi=$((tmi-10))
if [ $tmi -lt 10 ]; then
tmi=0$tmi;
fi
touch -acm $tme$tdi$tho$tmi.$tse $tfile
# echo "$tme$tdi$tho$tmi.$tse $tfile"
for i in `cat $dirfile`; do



  


14. Stat em C

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 15/01/2008 - 11:52h

Não me contive e implementei o mesmo que o stat -c "%X" em C.

Resta saber se ele compila bem no Unix (com gcc)
Para usar basta chamar meustat arquivo. O programa ignora parametros, logo NÃO É O MESMO QUE O stat!!
É sob medida para meu script original.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{

struct stat info;
int i;

if (argc < 2){
fprintf(stderr, "[STAT] Faltou nome do arquivo\n");
return(1);
}

/* Ignorando parametros para compatiblidade com o stat */
for (i=1; i<argc; i++){
if ((argv[i][0]!='-')&&(argv[i][0]!='%'))
break;
}
if (i == argc){
fprintf(stderr, "[STAT] Faltou nome do arquivo\n");
return(2);
}

if (stat(argv[i], &info)){
fprintf(stderr, "[STAT] Funcao stat retornou erro para %s\n", argv[i]);
return(3);
}
printf("%u\n", info.st_atime);
}


15. Não entendi teu script

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 15/01/2008 - 11:53h

Não entendi a logica do teu script!

Em determinado momento tu estas SETANDO o tempo!!

Sim, é isto que faz o touch. Ele ALTERA o tempo de acesso e não mostra qual era!



16. Tem como verificar em que data e horario o arquivo foi gravado no diretorio

Marcelo Converso
tacoinfo

(usa Ubuntu)

Enviado em 29/07/2010 - 12:25h

Parabens pelo script me ajudou em diversas vezes !
tem alguma maneira de verificar em que data e horario o arquivo foi gravado em determinado diretorio , nao interessa a data de criacao ou a data do arquivo e sim em que momento o arquivo foi gravado no diretorio assim como a data.
obrigado

coloquei a variavel %Z e ele conta o tempo a partir do momento que o arquivo eh gravado no diretorio funcionou da maneira que eu necessito

valeu

ficou assim

ESTADO="`stat -c "%Z" $a`"


17. Filtrar arquivos e enviar e-mail

Luan Dotto
luandotto

(usa Ubuntu)

Enviado em 04/11/2016 - 16:12h

Boa tarde!

Primeiramente, parabéns pela iniciativa de ensinar e pelo script, tem ajudado bastante...

Estou tentando fazer uma melhoria, filtrar as extenções e enviar e-mail somente se encontrar arquivos parados a x tempo....

Hoje o meu esta assim, mas não sei se esta correto e esta enviando e-mail ainda que não encontre nada.

Poderiam ajudar?

Outro ponto, fiz o filtro .XML corretamente?

Dentro do diretorio /mnt/ba/ existem varias pastas com 04 posições numericas, eu acesso com LS da seguinte forma:

for DIR in "[0-9][0-9][0-9][0-9]";do
ls -l $DIR/ocp/in/*.XML; done

Como faço para adicionar isso ao script abaixo?

#!/bin/bash

# Luan Dotto
# Viva o Linux.


# Configuracoes
TEMPO="600"

DIR="/mnt/ba/0071/ocp/in/"

ESPERA="30"

ESCREVE="/etc/log.txt"

function acao ()
{
MIN=$(( $2 / 60 % 60))
HOR=$(( $2 / 60 / 60))
SEG=$(( $2 - ($HOR * 60 * 60 + $MIN * 60) ))
echo "Arquivo $1 esta parado a ${HOR}h${MIN}m${SEG}s" >> $ESCREVE

}


# Funcao principal

echo "Programa inicio em `date` nos diretorios $DIR" >> $ESCREVE
while true
do
#cat /dev/null > $ESCREVE

AGORA="`date "+%s"`"
for d in $DIR
do

for a in $d/*.XML
do
ESTADO="`stat -c "%X" $a`"
PASSOU="$(( $AGORA - $ESTADO ))"
if [ $PASSOU -gt $TEMPO ]
then
acao $a $PASSOU
fi
done
done
echo "Existem OCP paradas no diretorio //XXXXX/integ/UNB/ocp/in verifique anexo" | mutt -s "Existem OCP Paradas" -a /etc/log.txt -- luan.dotto@hbsis.com.br
sleep $ESPERA
done






01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts