Script automatizado para zip registros de IIS?
-
09-06-2019 - |
Pregunta
Me gustaría escribir una secuencia de comandos por lotes que se amontonan en mi diario registros de IIS y zip por mes.
ex080801.de registro que está en el formato de exaammdd.registro de
ex080801.registro - ex080831.tronco se zip y los archivos de registro eliminado.
La razón por la que hacemos esto es porque en un pesado sitio un archivo de registro para un día podría ser de 500 mb a 1 gb así que nos postal de ellos hasta que los comprime en un 98% y volcar el real archivo de registro.Utilizamos webtrend para analizar los archivos de registro y es capaz de leer en un archivo zip.
¿Alguien tiene alguna idea sobre cómo guión de esta o estaría dispuesto a compartir algo de código?
Solución
Usted necesitará una herramienta de línea de comandos zip de los archivos.Recomiendo 7-Zip que es gratis y fácil de usar.La auto-contenida versión de línea de comandos (7za.exe) es el más portátil de elección.
He aquí un dos por lotes de la línea fichero zip de los archivos de registro y eliminar después de:
7za.exe a -tzip ex%1-logs.zip %2\ex%1*.log
del %2\ex%1*.log
El primer parámetro es el 4 dígitos para el año y el mes, y el segundo parámetro es la ruta de acceso al directorio que contiene los archivos de registro.Por ejemplo: ziplogs.bat 0808 c:\logs
Es posible obtener más elaborada (es decir,la búsqueda de los nombres de archivo para determinar en qué meses para archivar).Usted puede ser que desee comprobar hacia fuera el de Windows FINDSTR comandos para la búsqueda de entrada de texto con expresiones regulares.
Otros consejos
Aquí está mi script que básicamente se adapta a David, y cremalleras en marcha el pasado mes de registros, mueve y elimina los archivos de registro originales.esto puede ser adaptado para los logs de Apache demasiado.El único problema con esto es que usted puede necesitar para editar el reemplazar comandos, si su fecha DOS salidas de función de la fecha de la semana.Usted también necesitará instalar 7-zip.
También puede descargar IISlogslite pero comprime cada día de archivo en un único archivo zip que yo no lo encuentre útil.Hay un vbscript flotando alrededor de la web que hace la misma cosa.
------------------------------------------------------------------------------------- @echo on :: Name - iislogzip.bat :: Description - Server Log File Manager :: :: History :: Date Authory Change :: 27-Aug-2008 David Crow Original (found on stack overflow) :: 15-Oct-2008 AIMackenzie Slimmed down commands :: ======================================================== :: setup variables and parameters :: ======================================================== :: generate date and time variables set month=%DATE:~3,2% set year=%DATE:~8,2% ::Get last month and check edge conditions set /a lastmonth=%month%-1 if %lastmonth% equ 0 set /a year=%year%-1 if %lastmonth% equ 0 set lastmonth=12 if %lastmonth% lss 10 set lastmonth=0%lastmonth% set yymm=%year%%lastmonth% set logpath="C:\WINDOWS\system32\LogFiles" set zippath="C:\Program Files\7-Zip\7z.exe" set arcpath="C:\WINDOWS\system32\LogFiles\WUDF" :: ======================================================== :: Change to log file path :: ======================================================== cd /D %logpath% :: ======================================================== :: zip last months IIS log files, move zipped file to archive :: then delete old logs :: ======================================================== %zippath% a -tzip ex%yymm%-logs.zip %logpath%\ex%yymm%*.log move "%logpath%\*.zip" "%arcpath%" del %logpath%\ex%yymm%*.log
Utilizamos un script como el siguiente.Gzip es desde el cygwin proyecto.Estoy seguro de que podría modificar la sintaxis para el uso de una postal de la herramienta en su lugar.El "salto" argumento es el número de archivos que no se archive off -- seguimos 11 días en el 'actual' en el directorio.
@echo off
setlocal
For /f "skip=11 delims=/" %%a in ('Dir D:\logs\W3SVC1\*.log /B /O:-N /T:C')do move "D:\logs\W3SVC1\%%a" "D:\logs\W3SVC1\old\%%a"
d:
cd "\logs\W3SVC1\old"
gzip -n *.log
Endlocal
exit
Usted puede agarrar las utilidades de línea de comandos del paquete de DotNetZip para obtener las herramientas para crear cremalleras de secuencias de comandos.Hay una bonita herramienta llamada Zipit.exe que se ejecuta en la línea de comandos, agrega los archivos o directorios para archivos zip.Es rápido, eficiente.
Una mejor opción podría ser simplemente hacer la calma desde dentro de PowerShell.
function ZipUp-Files ( $directory )
{
$children = get-childitem -path $directory
foreach ($o in $children)
{
if ($o.Name -ne "TestResults" -and
$o.Name -ne "obj" -and
$o.Name -ne "bin" -and
$o.Name -ne "tfs" -and
$o.Name -ne "notused" -and
$o.Name -ne "Release")
{
if ($o.PSIsContainer)
{
ZipUp-Files ( $o.FullName )
}
else
{
if ($o.Name -ne ".tfs-ignore" -and
!$o.Name.EndsWith(".cache") -and
!$o.Name.EndsWith(".zip") )
{
Write-output $o.FullName
$e= $zipfile.AddFile($o.FullName)
}
}
}
}
}
[System.Reflection.Assembly]::LoadFrom("c:\\\bin\\Ionic.Zip.dll");
$zipfile = new-object Ionic.Zip.ZipFile("zipsrc.zip");
ZipUp-Files "DotNetZip"
$zipfile.Save()
Prestado postal de la función de http://blogs.msdn.com/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx
Aquí es powershell respuesta que funciona a las mil maravillas:
param([string]$Path = $(read-host "Enter the path"))
function New-Zip
{
param([string]$zipfilename)
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
function Add-Zip
{
param([string]$zipfilename)
if(-not (test-path($zipfilename)))
{
set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18))
(dir $zipfilename).IsReadOnly = $false
}
$shellApplication = new-object -com shell.application
$zipPackage = $shellApplication.NameSpace($zipfilename)
foreach($file in $input)
{
$zipPackage.CopyHere($file.FullName)
Start-sleep -milliseconds 500
}
}
$FilesToZip = dir $Path -recurse -include *.log
foreach ($file in $FilesToZip) {
New-Zip $file.BaseName
dir $($file.directoryname+"\"+$file.name) | Add-zip $($file.directoryname+"\$($file.basename).zip")
del $($file.directoryname+"\"+$file.name)
}
Podemos utilizar esta secuencia de comandos de powershell: http://gallery.technet.microsoft.com/scriptcenter/31db73b4-746c-4d33-a0aa-7a79006317e6
Utiliza 7-zip y verifys los archivos antes de eliminarlos
Regex hará el truco...crear un perl/python/php script para hacer el trabajo para usted..
Estoy bastante seguro de archivo por lotes de windows no se puede hacer regex.