首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

BusyBox 定制 Linux:inittab 不執行 rc.sysinit 排查指南

     編輯:程式設計綜合問答

現象

BusyBox 1.23.2,內核 2.6.18。/etc/inittab 配置 ::sysinit:/etc/rc.d/rc.sysinit,但啟動時未執行該腳本,直接進入 Shell。

根因:BusyBox init 實現差異

BusyBox init 並非完整兼容 System V init。其 inittab 解析規則:

  • 僅支援 id:runlevels:action:process 格式。
  • sysinit 動作要求 runlevels 欄位為空或包含 S。
  • 若 process 路徑不存在或不可執行,靜默跳過無報錯。

排查步驟

  1. 驗證腳本可執行:
    chmod +x /etc/rc.d/rc.sysinit
    ls -l /etc/rc.d/rc.sysinit
    # 輸出應顯示 -rwxr-xr-x
    
  2. 修正 inittab 格式:
    # 正確格式:id:runlevels:action:process
    ::sysinit:/etc/rc.d/rc.sysinit
    # 或顯式指定 runlevel S
    ::S:sysinit:/etc/rc.d/rc.sysinit
    
  3. 檢查 Shebang:腳本首行必須 #!/bin/sh,且 /bin/sh 指向 BusyBox sh。
  4. 內核命令行參數:確保傳遞 init=/sbin/init (BusyBox init 路徑)。

替代方案:直接在 inittab 啟動 Shell 腳本

::respawn:/bin/sh /etc/rc.d/rc.sysinit
# respawn 會在腳本結束後重啟,適合常駐服務
# 若只需啟動一次,腳本末尾執行 exec /bin/sh 切換到交互 Shell

參考資源

BusyBox inittab ignored - Unix StackExchange

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved