某一天测试张三和我说,重启执行失败,并且当着我的面测试了一把,我很是疑惑。
现象:测试发现reboot大概率失败
分析:本地shell执行reboot不会出现失败,也就是说reboot功能并无问题;那问题出在哪里呢?那肯定测试的方法与我不一致。接着我详细和测试沟通,发现测试是使用python写的脚本在shell下自动执行reboot,其实就是起了一个reboot进程,貌似也没啥差异。由于reboot被开发封装过,是先执行一系列的脚本,最终调用systemctl reboot,唯一的解释是最终没有调用到systemctl reboot,这个reboot进程就终止了。当然这个过程人工手动敲键盘手速是不够的,还得脚本执行才能复现。
解决方案:在脚本里面使用 nohup reboot >output 2>&1 & 代替reboot
总结:在shell下执行reboot,其实是执行了一个reboot的进程,由于reboot被封装过了,这个过程可以被打断,导致reboot没有完整的执行
nohup的功能,可以去详细看资料