软件吧
登录注册账号
/posts/pid-win11-win10
电脑必备

给计划任务里的自动清理脚本加了个失败重试,结果翻车了

极客阿凯 74 0 13

上个月写了套自动清理脚本,挂在计划任务里每天凌晨跑,清临时文件、旧日志、回收站。本来挺省心,结果上周发现C盘没清干净,查了日志发现是清理到某个目录时权限不够报错退出,后面的步骤全没执行。

我就琢磨着加个失败重试机制。思路很简单:脚本里每个清理步骤包一层,失败就重试三次,还不行就跳过继续下一步。拿自己主力机试了一版,看着挺顺。

问题出在重试间隔上。一开始设的是失败后立刻重试,结果遇上一个被占用的文件,脚本连着试了三次,日志里刷了一屏错误,最后还是跳过。但更坑的是,重试逻辑本身加了休眠等待,我没注意计划任务里还有「如果任务失败则重启」的选项,两个机制叠在一起,脚本跑了两遍,第二遍把第一遍刚清出来的空间又扫了一遍,虽然没删错东西,但日志里时间戳乱成一团,排查时差点以为脚本被重复触发。

后来我改了几处:

  • 重试间隔改成递增等待,第一次等5秒,第二次等15秒,第三次等30秒,给文件占用留释放时间。
  • 计划任务里的「失败重启」直接关掉,重试交给脚本自己控制,避免双重触发。
  • 每次执行写一条带PID和开始时间的记录,跑完追加结束时间和结果,这样对日志能一眼看出是不是重复跑。
  • 把跳过和失败分开记,跳过的不算错误,不影响整体退出码。

拿三台机子(一台主力Win11、一台老Win10、一台虚拟机)复现跑了五天,目前没再出现重复执行。虚拟机那台因为磁盘慢,递增等待反而比固定间隔更稳。

顺带说一句,这种活儿软领的自动优化确实能省事,点一下全给你安排明白,它也没广告,这点我认。但脚本里每一步等多久、什么条件算失败、日志怎么记,这些细粒度控制还是得自己来,不然出了问题连从哪儿查都不知道。

想问问各位:你们给计划任务里的脚本做失败重试时,重试次数和间隔一般怎么定?有没有遇到过跟系统自带重启策略打架的情况?

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。