凌晨两点五十,告警刚消停,趁这个空当把上周那个事记一下,不写下来堵得慌。
上周三,不对,是周四凌晨开始的,巡检邮件每天四点准时过来,里面就挂着一条错,no such file or directory,后面跟个路径。我那个巡检脚本是上个月刚翻新过的,让 AI 帮我重写过一版,加了白名单加了判断,跑起来一直很稳,所以我第一反应是它又开始不老实。
然后就开始查。先看路径,文件在,在的,我 ls 过好几遍。再看权限,755,没毛病。再看是不是软链断了,不是。再怀疑是不是从别的机器上拷过来的文件带 windows 换行,这个我早些年吃过大亏,赶紧 dos2unix 转了一遍,转完跑,还是报。中途我还把这段丢给 AI 让它帮我分析,它一口气给了我七八个方向,挨个试,试到第三条就乱了,方向太多反而不知道哪条是对的。它有句话说的对,让我先确认报错到底是从哪一行出来的。我把 set -x 打开跑了一遍,日志刷刷地往外冒,看着看着眼睛都花了,反正没看出个所以然。
第二天白班交接,我跟接班的兄弟提了一句,他说你那个脚本是不是有两个版本。我说不能,就一个。
那几天就这么挂着,告警照来,我每天早上眯之前顺手看一眼,心里烦,也没空深挖。到了周六凌晨,我又想起来这事,顺手把 crontab 拉出来看了一眼。
crontab 里写的那个路径,跟我这几天一直在改的那个路径,不是一个。
crontab 里是 /opt/ops/ 开头的,老路径,我改的是 /home/dapeng/tools/ 下面的。两个文件名字一样,都叫 check_mount.sh,一个我改得满头是汗,一个是半年前部署上去的老版本,里头还引用着一个上个月就下线的备份目录。
就是说那个报错是真的,报得一点没错,是我三天改的不是它在跑的那个。手动跑一直正常,因为手动跑的就是我改的那个。crontab 跑的是老的那个,引用了个不存在的目录,当然报。
三天。我一直在那个没毛病的新脚本上折腾,真正出问题的那个我连看都没打开过。
就这么个事。
咖啡第三杯了。这种蠢错以前也犯过,就是没这次拖得久。脚本攒多了之后这种事只会更多,两个同名文件放在两个目录下,我以前觉得无所谓,现在打算全给它们改成带路径前缀的名字,丑是丑,总比再查三天强。
先这样,四点还有个巡检。