Ви є тут

VBS Скрипт ротации (архивирования) логов IIS и SMTP

Visual Basic Logo

На почтовом сервере (Exchange) постоянно заканчивалось место на диске С - разрастался лог IISа. Нужно было периодически (раз в месяц) удалять старые логи. В один прекрасный день это надоело и я решил основательно решить эту проблему. Казалось бы, что тут сложного: ежемесячное зипование (с удалением) старых логов. Можно даже обойтись несложным батником. Но не все так просто...

Идея

Для начала перенес логи на другой раздел - там с местом просторнее. Но и от идеи ротации не отказался.

Идея такая:

  1. скрипт запускается планировщиком в последний день месяца в 23:55
  2. перемещает логи во временную папку
  3. зипует временную папку в архив с названием "месяц.год"
  4. архивы хранятся вечно (попадают с общим заданием резервного копирования на ленту)

Батник написал достаточно быстро, но...

Грабли

Грабли неожиданно нашлись в виндовом Scheduled Tasks - он не знает последний день месяца. Самый простой выход - запускать первого числа месяца в 00:01. Но, чтобы было красиво и логи за месяц хранились под правильной датой, нужно брать дату за вчера. Батник с этим не справился (реализуемо, но сильно уж через *опу). По этому скрипт был переписан на Visual Basic.

Реализация

В качестве архиватора используется 7zip, его 7z.exe должен быть в %WINDIR%\system32 - это важно!!! Для удобства, все пути вынесены в константы вначале скрипта. Сам скрипт неплохо прокомментирован - не трудно в нем разобраться.

REM =======================================
REM Скрипт ротации и архивирования логов
REM =======================================
REM Date    : 13/02/2012
REM Auth    : Ruslan Sheremet
REM Updt    : -
REM =======================================
REM Опишем константы
Const iisLogDir = "E:\IISLog\W3SVC1\" 'Путь к папке логов IIS
Const SMTPLogDir = "E:\SMTPLog\SMTPSVC2\" 'Путь к папке логов SMTP
Const tempDIR = "E:\TMP\" 'Путь к темповой папке
Const backupDIR = "F:\Backup\ZipLogs\" 'Путь к папке архивов - сюда складываются на хранение архивы логов

REM =======================================
REM дальше можно ничего не менять
Dim WshShell
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")

REM =======================================
REM Скрипт будет запускаться каждый месяц первого числа, но логи в архиве будут за предыдущий месяц
REM По этому, дату (месяц.год) нужно брать вчерашние
REM =======================================

REM создаем переменную "вчера"
yesterday = Now - 1
REM разделяем на год и месяц
LogYear = Year(yesterday)
LogMonth = Month(yesterday)
REM дописываем ноль, если месяц меньше 10
if LogMonth < 10 then LogMonth = "0" & LogMonth
REM создаем готовую к употреблению дату "вчерашний месяц.год"
datemonth =  LogMonth & "." & LogYear

REM =======================================
REM Ротация логов IIS
Set objFolder = objFSO.CreateFolder(tempDIR & "IISLog_" & datemonth)
REM Для тестирования работы лучьше использовать копирование,
REM objFSO.CopyFile iisLogDir & "*.log" , tempDIR & "IISLog_" & datemonth
REM но для реального использования предусмотрено перемещение файлов логов
    objFSO.MoveFile "E:\IISLog\W3SVC1\*.log" , "E:\TMP\IISLog_" & datemonth
REM !!!файл 7z.exe должен быть в %WINDIR%\system32!!!
WshShell.Run "7z.exe a " & backupDIR & "IISLog_" & datemonth & ".zip " & tempDIR & "IISLog_" & datemonth,0,1
Set fld = objFSO.GetFolder(tempDIR & "IISLog_" & datemonth)
    fld.Delete

REM =======================================
REM Ротация логов SMTP - аналогично логам IIS
Set objFolder = objFSO.CreateFolder(tempDIR & "SMTPLog_" & datemonth)
REM objFSO.CopyFile SMTPLogDir & "*.log" , tempDIR & "SMTPLog_" & datemonth
    objFSO.MoveFile "E:\SMTPLog\SMTPSVC2\*.log" , "E:\TMP\SMTPLog_" & datemonth
WshShell.Run "7z.exe a " & backupDIR & "SMTPLog_" & datemonth & ".zip " & tempDIR & "SMTPLog_" & datemonth,0,1
Set fld = objFSO.GetFolder(tempDIR & "SMTPLog_" & datemonth)
    fld.Delete

Готовый VBS скрипт ротации логов

Додати коментар

Filtered HTML

  • Адреси сторінок і електронної пошти атоматично перетворюються у посилання.
  • Дозволені теги HTML: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Рядки та параграфи відокремлюються автоматично.

Plain text

  • HTML теґи не відображаються
  • Рядки та параграфи відокремлюються автоматично.
By submitting this form, you accept the Mollom privacy policy.

Вхід

Powered by Rublin team