“”的最大历史深度为1.99亿个事件。我要把这个录10遍。我不介意数据是否被分割,例如每小时都有一个新的数据集。有人知道怎么做吗?我猜是一个批处理文件,备份文件将被顺序命名为文件夹。是否有一种方法来检测一旦Process填充了它的历史深度来杀死它,还是我只需要睡觉?
发布于 2013-03-26 21:03:35
是的,你得写剧本了。我以前在宝洁公司做过类似的工作,但我的目标不是捕捉数十亿的事件。不过,这应该会对您有所帮助,除非您需要有人为您编写脚本:
创建一个每5分钟运行一次的VBscript。任务计划程序可以帮助您完成这一任务。
如果这是脚本第一次运行,那么启动Procmon如下:
objShell.Run "Cmd /C " & PRM_ProcMonExe & " /quiet /minimized /AcceptEula /backingfile " & PRM_PMLDir & "Procmon" & subDir & ".pml"然后,在脚本的后续运行中,度量subDir中所有subDir文件的总大小。
If ProcMonTriggered = True And ProcMonTerminated = False Then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(PRM_PMLDir)
Set objFiles = objFolder.Files
For Each objItem In objFiles
If UCase(objFSO.GetExtensionName(objItem.Name)) = "PML" Then
totalPMLSize = totalPMLSize + objItem.Size
End If
Next
If totalPMLSize > (PRM_PMLMaxSize * 1073741824) Then
NQExt.CreateEvent PRM_TriggeredSev, "ProcMon Terminated", "AKP_NULL", gstrEventTarget, 0.0, "Process Monitor was terminated because the PML file reached the limit of " & PRM_PMLMaxSize & "GB." & vbCrlf & "Process Monitor cannot be triggered again until this script is re-deployed." & vbCrlf & "Please see KB " & PRM_KBArticle, "", 0, 0
Set objShell = CreateObject("WScript.Shell")
objShell.Run "Cmd /C " & PRM_ProcMonExe & " /AcceptEula /terminate"
End If
If isObject(objFiles) Then Set objFiles = Nothing
If isObject(objFolder) Then Set objFolder = Nothing
If isObject(objShell) Then Set objShell = Nothing
If isObject(objFSO) Then Set objFSO = Nothing
ProcMonTerminated = True
End If这不是专门为你的情况量身定制的。你得调整一下。这是我很久以前写的,目的略有不同。您要做的是,如果自上次脚本运行以来子目录中所有*.pml文件的大小都没有增加.然后您就知道是时候终止Procmon并启动一个新的实例了。
关键是,您必须使用/terminate参数优雅地终止Procmon,而不仅仅是终止进程,否则日志将损坏,无法读取。
然后在新的subDir中启动procmon的新实例。创造力将让您创建具有增量名称的子目录,如subdir1、subdir2、subdir3等。
编辑:而且,我从来没有运行过宝洁公司到2亿事件,所以我不知道它是否只是坐在那里,在达到1.99亿之后什么也不做,或者它是否完全关闭。如果是后者,那么你的工作就更容易了。只需检查Procmon.exe是否仍在运行。如果不是,那么您就知道是时候在新的子目录下再次启动它了。
编辑:是的,我认为一旦它到达历史深度,它就会开始滚动.所以做文件大小的事。
https://serverfault.com/questions/491548
复制相似问题