[bat脚本]当内存占用超过85%且时间是21点-9点区间时就执行重启机器语句,1个小时轮...
本帖最后由 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
```
杀掉一些进程释放内存比较好一些吧 直接重启系统?这操作有点暴力了,服务器没想到什么场景会直接这么干 没必要吧,太暴力了,杀掉一些不必要内存就好
就算重启,也得保存一下重要数据啊 思路是好的,支持,但重启有点暴力 太狠了有必要吗 挺不错的,不过我的内存从来都没有超过60%,感觉浪费了 今天加上任务,明天就得给我开喽。 dcahptl 发表于 2023-7-19 15:30
今天加上任务,明天就得给我开喽。
不用加任务,自带循环的。放在开机启动即可
页:
[1]