本帖最后由 SFdU0xv 于 2023-7-19 11:23 编辑
bat脚本
当内存占用超过85%且时间是21点-9点区间时就执行重启机器语句,1个小时轮询一次,适用于win server 2008R2
@echo off
setlocal
REM 当内存占用超过85%且时间是21点-9点区间时就执行重启机器语句,1个小时轮询一次,适用于win server 2008R2
:LOOP
REM 获取当前时间
for /f "tokens=1-3 delims=:." %%a in ("%time%") do (
set "hour=%%a"
set "minute=%%b"
set "second=%%c"
)
REM 获取当前内存占用率
for /f "skip=1 tokens=2 delims==" %%a in ('wmic OS get FreePhysicalMemory /value') do (
set "free_memory=%%a"
call :CHECK_MEM_USAGE
)
REM 判断满足条件则执行重启机器
if "%is_reboot%"=="true" (
echo 重启机器中...
shutdown /r /f /t 60
exit
) else (
echo 没有满足条件。等待一个小时后进行下一次检查...
powershell -Command "& {Write-Host '当前时间: ' -NoNewline ; Get-Date -format 'HH:mm:ss' ; Write-Host '下一次轮训检查时间是: ' -NoNewline ; $newTime = Get-Date -Date (Get-Date).AddHours(1) -format 'HH:mm:ss' ; $newTime}"
)
REM 等待一小时后继续检查
timeout /t 3600 >nul
goto :LOOP
:CHECK_MEM_USAGE
REM 计算内存使用率
set /a "total_memory=free_memory+0"
set /a "used_memory=768-total_memory"
set /a "mem_usage=(used_memory*100)/768"
REM 判断内存使用率是否超过85%
if %mem_usage% gtr 85 (
call :CHECK_TIME
if "%is_reboot%"=="true" (
set "is_reboot=true"
)
)
exit /b
:CHECK_TIME
REM 判断当前时间是否在晚上9点到凌晨9点之间
if %hour% lss 9 (
set "is_reboot=true"
) else if %hour% equ 9 (
if %minute% leq 59 (
set "is_reboot=true"
) else (
set "is_reboot=false"
)
) else if %hour% geq 21 (
set "is_reboot=true"
) else (
set "is_reboot=false"
)
exit /b
exit /b
reboot.zip
(975 Bytes, 下载次数: 6)
|