none
Script para monitoração de Arquivo RRS feed

  • Pergunta

  • Boa tarde pessoal, gostaria de saber se vocês conhecem algum script que monitore o tamanho de um arquivo, por exemplo, eu tenho um procedimento que gera um arquivo de 250MB por hora, e gostaria de saber se este arquivo está aumentando, ou se por algum acaso o arquivo pare de crescer eu receba um e-mail avisando que parou de aumentar seu tamanho ou coisa do tipo

    agradeço a todos
    quarta-feira, 12 de agosto de 2009 17:07

Respostas

  • Pronto, mas voce deve alterar as seguintes linhas:

       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"

       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"  colocando o Nome do servidor de email que voce utiliza e que permita relay

    -------------------------------------------------------------------------------------------------------------------------------------


    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("C:\MEDIA\TVDIARIO")

    Do
        old = objFolder.Size
        WScript.Sleep 30000
        message = message & "New size: " & objFolder.Size  & Chr(13)
        message = message & "Old size: " & old & Chr(13)
        Wscript.Echo message
     message = ""
     If old = objFolder.Size Then
      ' aqui colocamos a açao caso o arquivo nao tenha alterado o tamanho
      Mail
      'WScript.Echo "Não alterou"
     End If
    Loop

    Sub Mail
      Set objEmail = CreateObject("CDO.Message")
       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"
       objEmail.Subject = "Monitoração"
       objEmail.Textbody = "O diretorio monitorado nao teve alteração de tamanho"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
       objEmail.Configuration.Fields.Update
       objEmail.Send
    End Sub

    • Marcado como Resposta mauroserggio sexta-feira, 14 de agosto de 2009 11:35
    sexta-feira, 14 de agosto de 2009 00:18

Todas as Respostas

  • O script abaixo faz o que precisa, onde esta o 10 esta setado para verificar de 10 em 10 segundos (pode mudar la para aumentar o tempo de monitoracao). Ele informa neste tempo tamanho atual e anterior. Caso esteja igual, ele envia email, conforme abaixo (trocar todos os dados necessários, campos from, to, Nome do servidor de email por um valido e texto desejado). Neste exemplo, esta monitorando o arquivo e:\scripts\teste.txt. Lembre-se de alterar e colocar \\ para cada barra, conforme esta no script.

    --------------------------------------------------------------------------------------------------------------------

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2")

    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
        ("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE " _
            & "TargetInstance ISA 'CIM_DataFile' and " _
                & "TargetInstance.Name='e:\\scripts\\teste.txt'")

    Do
        Set objLatestEvent = colMonitoredEvents.NextEvent
        message = "File: " & objLatestEvent.TargetInstance.Name & Chr(13)
        message = message & "New size: " & objLatestEvent.TargetInstance.FileSize & Chr(13)
        message = message & "Old size: " & objLatestEvent.PreviousInstance.FileSize & Chr(13)
        Wscript.Echo message

     If objLatestEvent.TargetInstance.FileSize = objLatestEvent.PreviousInstance.FileSize Then
      ' aqui colocamos a açao caso o arquivo nao tenha alterado o tamanho
      Set objEmail = CreateObject("CDO.Message")
       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"
       objEmail.Subject = "Criacao de arquivo"
       objEmail.Textbody = "O arquivo " & objLatestEvent.TargetInstance.Name & _
       "nao se alterou na ultima checagem. Seu tamanho é de " & objLatestEvent.TargetInstance.FileSize
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
       objEmail.Configuration.Fields.Update
       objEmail.Send
     End If
    Loop

    quinta-feira, 13 de agosto de 2009 07:45
  • obrigado, eu testei aqui e apareceu um erro linha:2 caracter:1 segue o script alterado para vc ver: obrigado por sua ajuda, esse arquivo é uma pasta onde contém vários arquivos WMV que são gravações d eprogramações locais então fico monitorando se a pasta está aumentando seu tamanho mas apareceu esse erro, por gentileza veja se errei am algum local


    strComputer = "svm-info-11"
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2")

    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
        ("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE " _
            & "TargetInstance ISA 'CIM_DataFile' and " _
                & "TargetInstance.Name='\\svm-info-11\C\MEDIA\TVDIARIO'")

    Do
        Set objLatestEvent = colMonitoredEvents.NextEvent
        message = "File: " & objLatestEvent.TargetInstance.Name & Chr(13)
        message = message & "New size: " & objLatestEvent.TargetInstance.FileSize & Chr(13)
        message = message & "Old size: " & objLatestEvent.PreviousInstance.FileSize & Chr(13)
        Wscript.Echo message

     If objLatestEvent.TargetInstance.FileSize = objLatestEvent.PreviousInstance.FileSize Then
      ' aqui colocamos a açao caso o arquivo nao tenha alterado o tamanho
      Set objEmail = CreateObject("CDO.Message")
       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"
       objEmail.Subject = "Criacao de arquivo"
       objEmail.Textbody = "O arquivo " & objLatestEvent.TargetInstance.Name & _
       "nao se alterou na ultima checagem. Seu tamanho é de " & objLatestEvent.TargetInstance.FileSize
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
       objEmail.Configuration.Fields.Update
       objEmail.Send
     End If
    Loop

    quinta-feira, 13 de agosto de 2009 12:56
  • Voce esta executando este script local na maquina, no seu caso no "svm-info-11"? Porque é possivel conetar em wmi remoto, porem para checar a instancia, do jeito que este script esta desenvolvido, teria que ser local.

    Entao o começo do script deveria ficar assim:

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:" _
        & "{impersonationLevel=impersonate}!\\" & _
            strComputer & "\root\cimv2")

    Set colMonitoredEvents = objWMIService.ExecNotificationQuery _
        ("SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE " _
            & "TargetInstance ISA 'CIM_DataFile' and " _
                & "TargetInstance.Name='C:\\MEDIA\\TVDIARIO'")

    Acredito que este diretorio esta no C do server informado. Outra coisa: eu monitoro um arquivo apenas conforme voce pediu e fiz o script. Era isso mesmo ou voce quer que ele monitore uma pasta TVDIARIO?

    Até mais
    Angelo

    quinta-feira, 13 de agosto de 2009 13:19
  • Olá,

    Eu utilizo um parecido com a sua situação:
    Os clientes enviam por FTP e só quando o arquivo está no tamanho que eu desejo ele envia o email. Segue o script:


    Set objFSO = CreateObject("Scripting.FileSystemObject")

    nomeArquivo = "c:\teste.txt"
    Set objFile = objFSO.GetFile(nomeArquivo)
    intTempo1 = objFile.SIZE
    'tempo para checar o tamanho do arquivo novamente
    wscript.sleep 15000
    intTempo2 = objFile.SIZE

    if intTempo1 = intTempo2 Then
       enviaEmail
    End if


    Sub EnviaEmail()

    Set objEmail = CreateObject("CDO.Message")

     objEmail.From = "jesiel@contoso.msft"
     objEmail.To = "destino@contoso.msft"
     objEmail.Subject = "Arquivo recebido"
     objEmail.TextBody =  "ARQUIVO RECEBIDO"
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.0.0.1" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send

    End sub


    Coloque esse script para executar nas tarefas agendadas do Windows.

    Verifique se te atende e nos retorne.

    Até mais,

    Jesiel

    Obs.: Se útil, classifique

    quinta-feira, 13 de agosto de 2009 13:22
  • na verdade eu monitoro a pasta TVDIARIO, dentro dela existem vários arquivos de vídeo, e está eum um servidor este script deve rodar localmente no servidor, e verificar se a pasta continua a aumentar seu tamanho, porque isso, o sistema que faz a captura desses videos às vezes trava e eu fico sem saber quando parou e sabendo se a pasta está sendo incrementada eu tenho uma margem menor de perda de gravação assim eu sei quando o sistema não está mais gravando pois vai deixar de incrementar.
    quinta-feira, 13 de agosto de 2009 13:27
  • Olá,

    Acredito que é a mesma situação que tenho. Vou colocar meu script inteiro:

    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set objFSO = CreateObject("Scripting.FileSystemObject")


    retorno = False

    'Coloque aqui a pasta que será verificada
    strPasta = "\\server\compartilhamento\TVDIARIO\"

    'Coloque aqui a pasta para a qual os arquivos serão copiados (Se quiser copiar, se nao quiser apague essa linha)
    strDest = "\\hw00291\hotfolders\clientes\"

    'Coloque aqui os tipos de arquivos que serão copiados ou deletados, separados por ";"
    arrTipos = "eps;pdf;ps"
    arrTipos = split(arrTipos,";")

    strText =   VBCRLF
    strText = strText & "===================================================" & VBCRLF
    strText = strText & "ARQUIVOS MOVIDOS EM: " & now & VBCRLF
    strText = strText & "===================================================" & VBCRLF


    If (objFSO.FolderExists(strPasta) = True) Then
       Set Folder = ObjFSO.GetFolder(strPasta)
       Set MyFiles = Folder.files  
          For Each tipo in arrTipos
             For Each MyFiles in Folder.Files
                If instr(Right(myfiles.name,3),tipo)  > 0 Then
                   ChecaArquivo myfiles.path
                   if retorno = True Then
                      Envia_Alerta myfiles.name
                  End If
                End if
             Next
          Next
    End if

    wscript.quit

    Sub Envia_Alerta(texto)
    Set objEmail = CreateObject("CDO.Message")

     objEmail.From = "origem@contoso.msft"
     objEmail.To = "destino@contoso.msft"
     objEmail.Subject = "ARQUIVO PAROU DE CRESCER"
     objEmail.TextBody = strText & VBCRLF
     objEmail.TextBody = objEmail.TextBody & texto
     objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "10.0.0.1" '<-informe seu servidor smtp
     objEmail.Configuration.Fields.Item _
         ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
     objEmail.Configuration.Fields.Update
     objEmail.Send
    end sub


    Sub ChecaArquivo(nomeArquivo)

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.GetFile(nomeArquivo)

    intTempo1 = objFile.SIZE
    wscript.sleep 15000
    intTempo2 = objFile.SIZE

    if intTempo1 = intTempo2 Then
       retorno = True
    End if

    End sub


    Até mais,

    Jesiel

    Obs.: Se útil, classifique


    quinta-feira, 13 de agosto de 2009 13:52
  • olá, tentei executar o script mas não foi como esperado, eu necessito que ele verifique a seguinte situação: verifica  de tempo em tempo, 10/10 segundos ou mais tamanho atual e anterior. Caso esteja igual, ele envia email informando que a pasta não está incrementando. o Angelo descreveu bem o que preciso  mas o script dele me retorna um erro: linha:2 caract: 1 permissão negada: "GetObject" cód: 800A0046
    quinta-feira, 13 de agosto de 2009 14:12
  • Olá angelo, seu script fica preso nos processos do Windows nao consigo receber nenhum tipo de e-mail e fica cheio de processos e tenho que sair finalizando tudo.

    Jesiel, testei o script que me enviou mas ele me retorna um erro, agradeço a vocês a ajuda isso me facilitaria a vida no gerenciamento deste servidor de gravação que vive parando e eu só vou saber quando o usuário reclama que nao tem mais visualização pois ele para de gravar.

    quinta-feira, 13 de agosto de 2009 17:12
  • Olá angelo, seu script fica preso nos processos do Windows nao consigo receber nenhum tipo de e-mail e fica cheio de processos e tenho que sair finalizando tudo.

    Jesiel, testei o script que me enviou mas ele me retorna um erro, agradeço a vocês a ajuda isso me facilitaria a vida no gerenciamento deste servidor de gravação que vive parando e eu só vou saber quando o usuário reclama que nao tem mais visualização pois ele para de gravar.

    quinta-feira, 13 de agosto de 2009 17:14
  • Para ficar monitorando, temos 2 opçoes: ou colocar em Loop e ai o processo wscript vai ficar ativo (mas só um... se tem mais de um é porque foi clicado mais de uma vez) ou entao colocar como tarefa agendada como o Jesil propos.

    Eu alterei o script um pouco, tirei a parte do email colocando para uma funçao q esta comentanda para somente dar uma mensagem para voce poder avaliar o funcionamento. Tem que rodar local no servidor. Se for isso, me fala que colocamos o email para funcionar. Esta checando de 30 em 30 seg e fica com o processo rodando. Caso queira colocar nas tarefas agendadas, o script tem que ser refeito.

    ------------------------------------------------------------------------------------------------

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("C:\MEDIA\TVDIARIO")

    Do
        old = objFolder.Size
        WScript.Sleep 30000
        message = message & "New size: " & objFolder.Size  & Chr(13)
        message = message & "Old size: " & old & Chr(13)
        Wscript.Echo message
     message = ""
     If old = objFolder.Size Then
      ' aqui colocamos a açao caso o arquivo nao tenha alterado o tamanho
      'Mail
      WScript.Echo "Não alterou"
     End If
    Loop

    Sub Mail
      Set objEmail = CreateObject("CDO.Message")
       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"
       objEmail.Subject = "Criacao de arquivo"
       objEmail.Textbody = "O arquivo " & objLatestEvent.TargetInstance.Name & _
       "nao se alterou na ultima checagem. Seu tamanho é de " & objLatestEvent.TargetInstance.FileSize
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
       objEmail.Configuration.Fields.Update
       objEmail.Send
    End Sub

     

    quinta-feira, 13 de agosto de 2009 21:14
  • funcionou perfeitamente, ele enviou uma mensagem conforme você disse, agora o interessante é receber um e-mail, tem como? sim ele vai ficar rodando local no servidor.
    quinta-feira, 13 de agosto de 2009 21:27
  • Pronto, mas voce deve alterar as seguintes linhas:

       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"

       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"  colocando o Nome do servidor de email que voce utiliza e que permita relay

    -------------------------------------------------------------------------------------------------------------------------------------


    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder("C:\MEDIA\TVDIARIO")

    Do
        old = objFolder.Size
        WScript.Sleep 30000
        message = message & "New size: " & objFolder.Size  & Chr(13)
        message = message & "Old size: " & old & Chr(13)
        Wscript.Echo message
     message = ""
     If old = objFolder.Size Then
      ' aqui colocamos a açao caso o arquivo nao tenha alterado o tamanho
      Mail
      'WScript.Echo "Não alterou"
     End If
    Loop

    Sub Mail
      Set objEmail = CreateObject("CDO.Message")
       objEmail.From = "monitor@dominio.com"
       objEmail.To = "admin2@dominio.com"
       objEmail.Subject = "Monitoração"
       objEmail.Textbody = "O diretorio monitorado nao teve alteração de tamanho"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = _
             "NomeServidorEmail"
       objEmail.Configuration.Fields.Item _
          ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
       objEmail.Configuration.Fields.Update
       objEmail.Send
    End Sub

    • Marcado como Resposta mauroserggio sexta-feira, 14 de agosto de 2009 11:35
    sexta-feira, 14 de agosto de 2009 00:18
  • Perfeito, funcionou como esperado, obrigado pela atenção dispensada

    sexta-feira, 14 de agosto de 2009 11:38
  • Caro Angelo,

    Esse script serveria para monitorar um diretório com vários FTP's e quando alguém postar algo novo, eu seja avisado?

    Obrigado!

    Abraços,

    Daniel

    domingo, 23 de outubro de 2011 19:55