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

给计划任务里的脚本加了个日志时间戳,发现它每天偷偷跑了两遍

极客阿凯 23 0 13

最近在整理自己那套自动化脚本,顺手给几个常驻的计划任务加了行日志,记录每次触发的精确时间。本来只是想看看执行耗时,结果一翻日志发现有个清理临时文件的脚本每天跑了两遍——一遍在设定时间,另一遍在开机后几分钟内。

先说排查思路。计划任务里我只建了一条触发器,按设定时间每天一次,所以多出来的那次肯定不是这里触发的。我拿三台机子复现:台式机、一台旧本子、一台虚拟机。三台都出现了重复执行,只是第二遍的时间点不固定,跟开机时间挂钩。

然后去翻任务计划程序的历史记录。默认这个功能是关的,得在「操作」里手动开启「启用所有任务历史记录」,不然你什么都看不到。开了之后跑了两天,日志里能看到同一个脚本在两条不同的任务路径下被调用,一条是我自己建的名字,另一条路径前缀看着像某个软件安装时注册的。

顺着路径去找,果然在安装目录下找到一个同名但内容不同的计划任务,多半是安装时顺带塞进去的。它的触发器是「登录时」,跟我那条互不干扰,所以任务列表里看着人畜无害,实际执行结果就是重复跑。

处理方式很简单:把那个第三方任务禁用掉,保留我自己的那条。但这里有个坑——直接删任务,某些软件升级时会重新注册回来,禁用它也未必拦得住。我的做法是先在「操作」里把可执行文件路径记下来,确认跟主程序无关之后再禁用,然后观察一周日志。目前三天没再重复触发。

顺便说个判断依据。判断重复执行到底有没有实际影响,别只看任务列表,要看脚本自己的日志时间戳和实际产生的文件变化。我这个清理脚本重复跑问题不大,但如果换成同步类或者删档类的脚本,重复执行就是事故。所以现在我的习惯是:脚本入口第一件事就是写一行带 PID 和时间戳的日志,成本几乎为零,排查时能救命。

自动优化工具那种「一键接管」我是不太敢用的,无广告这点确实值得肯定,但计划任务这种地方,谁注册了什么、什么时候触发,我还是想自己心里有数。

问一句:你们平时会去开任务计划程序的历史记录吗?还是觉得默认关着就关着,出事再翻?

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

社区回应

0 Replies

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

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