You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16.04.3 LTS init.d启动脚本偶发重复执行问题排查咨询

排查Ubuntu 16.04中init.d脚本偶发重复执行的问题

这种偶发的脚本重复启动确实挺闹心的,咱们一步步来拆解排查:

  • 先检查脚本自身的启动逻辑
    很多时候重复执行是因为脚本的start函数没做进程存在性校验。比如你的脚本里有没有在启动时创建PID文件,或者检查目标进程是否已经在运行?如果没有,那系统启动过程中可能因为某些触发条件(比如依赖服务重启)导致脚本被再次调用。建议在脚本的start分支开头加上:

    PIDFILE="/var/run/TEST.pid"
    if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE") 2>/dev/null; then
        echo "TEST is already running" >> /var/log/test_script.log
        exit 0
    fi
    

    同时每次启动成功后把当前PID写入PID文件,这样能避免重复启动。

  • 检查所有运行级别的启动链接
    你只创建了rc2.d/S99TEST,但Ubuntu默认运行级别是2,不过也有可能其他运行级别(比如3、4、5)也存在同名链接?用这条命令检查所有rc目录:

    ls -l /etc/rc*.d/*TEST
    

    如果发现其他运行级别也有S开头的链接,那系统切换运行级别时就会再次执行脚本。

  • 排查Systemd/Upstart的干扰
    Ubuntu 16.04是Systemd和Upstart的过渡版本,有可能你的脚本同时被init.d和另一个启动系统调用了:

    • 检查有没有Systemd的service文件:systemctl list-unit-files | grep TEST,如果存在同名的.service文件,可能会和init.d脚本重复启动;
    • 检查Upstart的配置:ls /etc/init/*TEST.conf,如果有对应的Upstart配置,也可能导致重复触发。
  • 给脚本加详细日志,追踪启动来源
    既然系统日志里没记录,那咱们自己在脚本里加日志。在脚本最开头(或者start函数的第一行)加上:

    LOGFILE="/var/log/test_script.log"
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] TEST script triggered | User: $USER | PID: $$ | PPID: $PPID | Call path: $0 $@" >> "$LOGFILE"
    

    这里的PPID(父进程ID)很关键,你可以通过它反查是谁启动了脚本:比如父进程是1(init/systemd),还是其他服务进程?如果两次启动的PPID不同,就能定位到不同的启动源。

  • 深挖系统启动日志
    试试这些日志排查命令:

    • 如果是Systemd处理init.d脚本:journalctl -u rc-local.service | grep TEST;
    • 查看Upstart日志:cat /var/log/upstart/* | grep TEST;
    • 查看内核启动日志:dmesg | grep TEST;
    • 甚至可以检查/var/log/syslog的完整内容,用grep -i "test\|init.d" /var/log/syslog来过滤。
  • 检查其他服务的依赖或调用
    有没有其他init.d脚本在启动过程中调用了你的TEST脚本?比如某个服务的启动脚本里执行了service TEST start或者直接调用/etc/init.d/TEST?用这条命令搜索:

    grep -r "TEST" /etc/init.d/
    
  • 手动测试脚本行为
    手动执行/etc/init.d/TEST start多次,看看会不会出现重复启动的情况。如果手动执行也会触发两次,那问题肯定出在脚本自身的逻辑里;如果手动正常,那就是系统启动流程中的特殊场景导致的。

内容的提问来源于stack exchange,提问作者logidelic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:54:20