You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供适用于任务计划程序的IIS应用程序池回收脚本及定时自动配置指导

请求提供适用于任务计划程序的IIS应用程序池回收脚本及定时自动配置指导

Hey there! I’ve set up this exact nightly recycle task a few times for my own servers, so let me break down everything you need to get it working smoothly.

第一步:准备回收脚本

你可以选择PowerShell或者CMD脚本,选你顺手的就行:

PowerShell脚本(推荐,更灵活)

创建一个.ps1文件(比如RecycleIISAppPool.ps1),内容如下:

# 替换成你的应用程序池名称,多个的话用逗号分隔,比如@("Pool1", "Pool2")
$targetPools = @("YourAppPoolName")
$logPath = "C:\Logs\AppPoolRecycle.log" # 可选:日志文件路径,方便排查问题

# 确保日志目录存在
if (-not (Test-Path (Split-Path $logPath))) {
    New-Item (Split-Path $logPath) -ItemType Directory | Out-Null
}

foreach ($pool in $targetPools) {
    $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
    Write-Host "[$timestamp] Starting recycle for application pool: $pool"
    Add-Content $logPath "[$timestamp] Starting recycle for application pool: $pool"

    try {
        # 使用系统自带的appcmd命令回收应用池
        & C:\Windows\System32\inetsrv\appcmd.exe recycle apppool /apppool.name:$pool
        if ($LASTEXITCODE -eq 0) {
            Write-Host "[$timestamp] Successfully recycled $pool"
            Add-Content $logPath "[$timestamp] Successfully recycled $pool"
        } else {
            throw "Appcmd returned exit code $LASTEXITCODE"
        }
    } catch {
        $errorMsg = "[$timestamp] Failed to recycle $pool : $_"
        Write-Host $errorMsg
        Add-Content $logPath $errorMsg
    }
}

记得把YourAppPoolName换成你实际的应用池名称,如果有多个,就像注释里那样用逗号分隔。日志部分是可选的,但建议加上,方便出问题时排查。

CMD脚本(适合习惯命令行的用户)

创建一个.cmd文件(比如RecycleIISAppPool.cmd),内容如下:

@echo off
set "APP_POOL_NAME=YourAppPoolName"
set "LOG_PATH=C:\Logs\AppPoolRecycle.log"

:: 确保日志目录存在
if not exist "%LOG_PATH%\.." mkdir "%LOG_PATH%\.."

set "TIMESTAMP=%date% %time%"
echo [%TIMESTAMP%] Starting recycle for application pool: %APP_POOL_NAME% >> "%LOG_PATH%"

C:\Windows\System32\inetsrv\appcmd.exe recycle apppool /apppool.name:%APP_POOL_NAME%
if %errorlevel% equ 0 (
    echo [%TIMESTAMP%] Successfully recycled %APP_POOL_NAME% >> "%LOG_PATH%"
) else (
    echo [%TIMESTAMP%] Failed to recycle %APP_POOL_NAME% (Error level: %errorlevel%) >> "%LOG_PATH%"
)

同样替换APP_POOL_NAME为你的应用池名称,日志路径也可以按需修改。

第二步:用任务计划程序设置定时任务

接下来把脚本做成定时任务,让它每晚自动运行:

  1. 打开任务计划程序:可以在开始菜单搜索“任务计划程序”,或者按下Win+R输入taskschd.msc回车打开。
  2. 点击右侧的「创建基本任务」,跟着向导走:
    • 名称:给任务起个清晰的名字,比如「每晚回收IIS应用池」,描述可以写“每天凌晨2点自动回收指定IIS应用池”。
    • 触发器:选择「每天」,然后设置你想要的运行时间(推荐凌晨服务器负载低的时段,比如2:00 AM),重复周期选1天,点击下一步。
    • 操作:选择「启动程序」,点击下一步。
    • 启动程序设置:
      • 如果用PowerShell脚本:程序/脚本填powershell.exe,添加参数填-ExecutionPolicy Bypass -File "C:\Path\To\Your\RecycleIISAppPool.ps1"(替换成你的脚本实际路径)。
      • 如果用CMD脚本:程序/脚本填cmd.exe,添加参数填/c "C:\Path\To\Your\RecycleIISAppPool.cmd"(替换成你的脚本实际路径)。
    • 最后勾选「当单击完成时,打开此任务属性的对话框」,然后点击完成。
  3. 在任务属性里做关键配置:
    • 切换到「常规」选项卡:勾选「不管用户是否登录都要运行」,还要勾选「使用最高权限运行」(因为操作IIS需要管理员权限)。
    • 切换到「设置」选项卡:可以勾选「如果任务失败,每隔5分钟重试一次」,最多重试3次,这样万一某次回收失败,任务会自动重试。

最后:测试一下!

设置完之后,建议手动运行一次任务,确认脚本能正常工作:在任务计划程序里找到你的任务,右键点击「运行」,然后去IIS管理器里看应用池的状态(回收后会显示“正在启动”或者已经正常运行),也可以查看日志文件有没有报错。

备注:内容来源于stack exchange,提问作者juiceman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 16:04:28