rc 資料夾是否包含啟動時啟動的檔案?

rc 資料夾是否包含啟動時啟動的檔案?

我在 中創建了一個文件/etc/rc0.d,將其命名為rc.local.

在此文件中,我添加了一行來運行我放入的另一個文件Desktop。我做了這一切,以便該命令可以在啟動時運行。我跟著本文中的說明(第一種方法),但似乎沒有任何作用。

為什麼這不起作用?

答案1

/etc/rc.d/您連結的說明中提到的是一個主要是歷史目錄,該目錄曾經用於將所有啟動腳本目錄分組在一起:會有/etc/rc.d/init.d//etc/rc.d/rc0.d//etc/rc.d/rc1.d等等。大多數現代發行版早已選擇省略該rc.d目錄並將其他目錄直接放在/etc/.

/etc/rc0.d/應該包含到應該在以下位置執行的腳本的符號連結(腳本的實際位置應該是/etc/init.d/系統關閉或斷電

/etc/rc6.d/用於連結到應在以下位置執行的腳本重啟(即關閉系統並打算立即重新啟動時,例如安裝核心更新後)。

最適合腳本連結的目錄是 或/etc/rc3.d//etc/rc5.d/取決於您的系統配置和系統的預設運行等級(如果使用 SysVinit)。基於Debian 的Linux 發行版通常使用運行等級3 來實現正常的多用戶狀態(假設是經典的SysVinit),而基於RedHat/Fedora 的發行版將使用運行等級5 來實現啟用GUI 登入的多用戶狀態,並使用運行等級3 來實現多用戶狀態停用本機 X11 GUI 子系統。

任何目錄中的符號連結名稱/etc/rc?.d/都應以大寫 S 或大寫 K 開頭,後跟(通常)兩位數數字,以標識腳本在啟動順序中的相對位置該目錄中的連結。大寫的 S 將使系統使用命令列參數運行連結腳本start,而 K 將使系統stop使用該參數。

因此,您的腳本應該被放入/etc/init.d/rc.local,然後您應該創建一個或兩個符號鏈接,如下所示:

ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
ln -s /etc/init.d/rc.local /etc/rc5.d/S99rc.local

但這還不是全部!

現代Linux發行版,即使是那些使用經典的SysVinit而不是的systemd,也傾向於使用各種解決方案來並行執行各種系統啟動任務,而不是嚴格地一項一項地運行它們。這是因為在現代多核心 CPU 上,並行化將使啟動過程更快。在這種情況下,您應該在腳本的開頭添加一個特定格式的註解區塊來定義腳本所依賴的系統服務,否則並行邏輯可能會執行腳本太快了,在先啟動所需的系統服務之前。

如果您的發行版使用systemd,這一點尤其重要,因為即使某些發行版的「出廠預設」預設值rc.local也會在啟動過程中很早就執行,除非您新增適當的依賴定義。

http://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html有關 SysVinit 樣式啟動/關閉腳本的建議註解區塊的目前規格。

簡而言之,您可能希望在腳本的開頭添加類似的內容rc.local

### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: run locally-configured start-up commands
### END INIT INFO

在我看來,方法 1您連結的說明包含不完整和舊的建議。其他兩種方法對於新用戶來說可能更容易,但不包括如何確定這些方法是否適用於任何給定發行版的說明。

相關內容