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

Linux rc.d 啟動腳本執行順序:串行無依賴等待

     編輯:程式設計疑難解答

問題核心

/etc/rc.d/rcN.d/ 目錄下腳本命名 S50aaa, S51bbb,數字代表啟動順序。系統是否等待 aaa 成功執行完畢才啟動 bbb?

答案

不等待執行完成,直接串行啟動下一個。

機制詳解

  • init/systemd(SysV 兼容模式)按文件名排序遍歷 S* 腳本。
  • 對每個腳本調用 /etc/init.d/script start(或 systemctl start)。
  • 默認同步調用:父進程 fork+exec 子進程並 waitpid 等待其退出,然後處理下一個。
  • 不檢查退出碼:即使腳本返回非 0(失敗),啟動流程仍繼續執行後續腳本(除非配置 systemd 依賴)。

代碼邏輯模擬


# 伪代碼
scripts = sorted(glob("S*")) # S50aaa, S51bbb
for script in scripts:
    pid = fork()
    if pid == 0:
        exec(script, "start")
        exit(127)
    else:
        waitpid(pid, &status) # 等待結束,忽略 status
        # 立即進入下一個循環

實踐啟示

  1. 順序僅控制啟動先後,不保證服務就緒。若 bbb 依賴 aaa 端口,需在 bbb 腳本內部實現重試/等待邏輯。
  2. systemd 服務單元:現代系統建議編寫 .service 文件,使用 After=aaa.service, Requires=aaa.service 聲明依賴,由 systemd 管理並行/串行與健康檢查。
  3. 腳本內部:耗時操作建議異步化(& 背景運行),避免阻塞整體啟動流程。

總結

rc.d 腳本按數字順序串行啟動、不等待業務就緒、忽略失敗繼續。生產環境關鍵服務請遷移至 systemd 管理。

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