BATCH SCRIPT - Растущий журнал данных при перезапуске сервисов - PullRequest
0 голосов
/ 28 марта 2019

У меня есть скрипт для остановки и запуска служб IIS, в котором он определяет журнал и каталог. Созданный журнал является растущим файлом, так как он имеет ту же директорию имени (код ниже):

@ECHO About to stop the StackProcess
cd %windir%\system32\inetsrv 
appcmd stop apppool /apppool.name:StackProcess
echo %date% %time% - Service Stopped Successfully > C:\Logs\StackProcess_IISrestart.log
@ECHO StackProcess Stopped

TIMEOUT /t 05 /nobreak

@ECHO StackProcess
cd %windir%\system32\inetsrv 
appcmd start apppool /apppool.name:StackProcess
echo %date% %time% - Service Restarted Successfully > C:\Logs\StackProcess_IISrestart.log
@ECHO StackProcess Restarted

Следующим моим шагом было создание файла журнала, который будет называться в соответствии с меткой даты, например «StackProcess_IISrestart-YYYYMMDD», и этот файл журнала также будет расти.

echo off
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%

set SUBFILENAME=StackProcess%CUR_YYYY%%CUR_MM%%CUR_DD%

@ECHO About to stop the StackProcess
cd %windir%\system32\inetsrv 
appcmd stop apppool /apppool.name:StackProcess
echo %date% %time% - Service Stopped Successfully > C:\Logs\%SUBFILENAME%.log
@ECHO StackProcess Stopped

TIMEOUT /t 05 /nobreak

@ECHO StackProcess
cd %windir%\system32\inetsrv 
appcmd start apppool /apppool.name:StackProcess
echo %date% %time% - Service Restarted Successfully > C:\Logs\%SUBFILENAME%.log
@ECHO StackProcess Restarted

Но этот код работал только тогда, когда файл будет перезаписывать существующий, что означает, что файл журнала не будет расти в течение дня. Есть ли что-то, что я пропускаю, чтобы включить код, когда я хочу, чтобы он рос вместо этого? Помоги мне, спасибо.

1 Ответ

1 голос
/ 28 марта 2019

Если я правильно понимаю, похоже, что вы не понимаете, как работает оператор перенаправления. > начинается с нового, >> добавляется. Простое переключение на соответствующего оператора решит вашу проблему.

@Echo Off
Set "log="
For /F "Tokens=1-3Delims=/ " %%A In ('RoboCopy/NJH /L "\|" Null'
)Do If Not Defined log Set "log=StackProcess%%A%%B%%C.log"

Echo Stopping the StackProcess
"%__AppDir__%InetSrv\AppCmd.exe" Stop AppPool /apppool.name:StackProcess
Echo %DATE% %TIME% - Service Stopped Successfully>"%log%"
Echo StackProcess Stopped
Timeout 5 /NoBreak>Nul

Echo Starting the StackProcess
"%__AppDir__%InetSrv\AppCmd.exe" Start AppPool /apppool.name:StackProcess
Echo %DATE% %TIME% - Service Restarted Successfully>>"%log%"
Echo StackProcess Restarted
Timeout 2 /NoBreak>Nul

Обратите внимание, что, хотя в приведенном выше примере я мог внести некоторые улучшения, вы регистрируете «успешные» сообщения без фактической проверки того, что процессы запуска и остановки были успешными. Я оставлю вам решать, хотите ли вы расширить свой код для такой проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...