记一个神奇的问题

在帮同事看一个脚本,执行结果非预期,解决了几个主要的点之后,出现了另外一个不正常的现象

脚本执行到一半被中止了,看了半天也看不出问题,

于是在脚本里打上日志输出,找到了退出的代码行,这行代码是执行另外一个程序,也是一个脚本

于是再次分析这个脚本,分析完整个流程,也没有发现问题,逻辑都是正常的,但这里没有再加打印日志了

想不清楚是啥原因了,于是想把脚本简化,

复制了一个脚本文件,改名simple.sh,删除掉大部分逻辑,只留下从头到报错位置的代码

一执行,正常了,这会就有点奇怪了

不知道代码从哪里再拆分一下,于是先把全量代码再复制一遍看执行效果 cat install_n9e_agent.sh > simple.sh

再执行simple.sh,居然正常了

再回来执行instal_n9e_agent.sh还是不正常

这就让我觉得很神奇了

对比了文件权限,对比了文件内容,全都一样,就执行结果不一样

这时求助组里一位大神

描述清楚问题之后

先是咨询diff两个文件,

再是set -x让shell打印出当前执行的脚本,还是定位到之前我用日志排查到的位置,control这个脚本

大神思考到了文件名可能有影响,拿文件名去control里面搜,我一下子意识到了问题所在

control这里面有kill进程的逻辑,这个逻辑匹配了n9e相关的进程,结果把父亲进程给杀死了

回想起来自己排查的整个过程,

其实从脚本意外中止的时候也能看出一些线索,打印了一个terminated,有经验的话是能意识到,程序由于某些原因被中断了,这个需要靠经验

另外一个点就是我通过打印日志的方式已经定位到了control,但是没有看出问题,看control的逻辑都没问题,就没有关联想到外面执行的脚本名字正在kill匹配范围之内

results matching ""

    No results matching ""