请求提供适用于任务计划程序的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为你的应用池名称,日志路径也可以按需修改。
第二步:用任务计划程序设置定时任务
接下来把脚本做成定时任务,让它每晚自动运行:
- 打开任务计划程序:可以在开始菜单搜索“任务计划程序”,或者按下Win+R输入
taskschd.msc回车打开。 - 点击右侧的「创建基本任务」,跟着向导走:
- 名称:给任务起个清晰的名字,比如「每晚回收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"(替换成你的脚本实际路径)。
- 如果用PowerShell脚本:程序/脚本填
- 最后勾选「当单击完成时,打开此任务属性的对话框」,然后点击完成。
- 在任务属性里做关键配置:
- 切换到「常规」选项卡:勾选「不管用户是否登录都要运行」,还要勾选「使用最高权限运行」(因为操作IIS需要管理员权限)。
- 切换到「设置」选项卡:可以勾选「如果任务失败,每隔5分钟重试一次」,最多重试3次,这样万一某次回收失败,任务会自动重试。
最后:测试一下!
设置完之后,建议手动运行一次任务,确认脚本能正常工作:在任务计划程序里找到你的任务,右键点击「运行」,然后去IIS管理器里看应用池的状态(回收后会显示“正在启动”或者已经正常运行),也可以查看日志文件有没有报错。
备注:内容来源于stack exchange,提问作者juiceman
相关产品推荐
相关产品推荐

