SFdU0xv 发表于 2023-7-19 11:20

[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
```


TWYX 发表于 2023-7-19 11:30

杀掉一些进程释放内存比较好一些吧

bbs119 发表于 2023-7-19 11:34

直接重启系统?这操作有点暴力了,服务器没想到什么场景会直接这么干

xscbelieve 发表于 2023-7-19 11:43

没必要吧,太暴力了,杀掉一些不必要内存就好

就算重启,也得保存一下重要数据啊

sutramusic 发表于 2023-7-19 11:49

思路是好的,支持,但重启有点暴力

1330150311 发表于 2023-7-19 12:44

太狠了有必要吗

htxz2022 发表于 2023-7-19 14:48

挺不错的,不过我的内存从来都没有超过60%,感觉浪费了

dcahptl 发表于 2023-7-19 15:30

今天加上任务,明天就得给我开喽。

SFdU0xv 发表于 2023-7-19 21:25

dcahptl 发表于 2023-7-19 15:30
今天加上任务,明天就得给我开喽。

不用加任务,自带循环的。放在开机启动即可
页: [1]
查看完整版本: [bat脚本]当内存占用超过85%且时间是21点-9点区间时就执行重启机器语句,1个小时轮...