開機啟動 Linux開機自啟和執行級別

2021-09-08 04:35:46 字數 2688 閱讀 9923

主要用來啟動一些系統服務,根據runlevel執行rcx.d, 而在rcx.d中都會在最後呼叫rc.local

一般情況下,大多數的linux作業系統使用/etc/init.d/(或/etc/rc.d/init.d)下的指令碼來配置應用程式的自動啟動。

例如,在某些linux系統中,corn程式通過/etc/init.d/corn指令碼啟動,apache通過/etc/init.d/httpd啟動,syslogd通過/etc/init.d/syslogd啟動,而sshd則通過/etc/init.d/sshd指令碼啟動。

通常這些指令碼通過來自特定rc.d目錄的符號鏈結執行。為了配置從哪個rc.d目錄執行指令碼,linux系統提供了許多不同的工具,同時也可以手工進行配置。linux系統有乙個包含所有實際啟動指令碼檔案的目錄。它可能是/etc/init.d,也可能是/etc/rc.d/rc.d。同時對應每個執行級別(runlevel)又有乙個另外的目錄,它們可能是/etc/rc2.d,也可能是/etc/rc.d/rc2.d。這些目錄中的檔案通常是指向實際指令碼檔案的符號鏈結。

3.直接在/etc/rc.d/rc.local指令碼中新增命令

在linux系統中,有乙個類似windows系統中autoexec.bat的檔案,它就是/etc/rc.d/rc.local,系統開機後自動執行使用者的應用程式或啟動系統服務的命令儲存在開發板根檔案系統的這個檔案中。因此可以編輯rc.local檔案,將要執行的程式(命令)新增到該資料夾中。linux系統在啟動後還未登入前,將自動執行該程式(命令),達到開機自動執行使用者的應用程式的目的。

linux系統有7個執行級別(runlevel)

執行級別0:系統停機狀態,系統預設執行級別不能設為0,否則不能正常啟動

執行級別1:單使用者工作狀態,root許可權,用於系統維護,禁止遠端登陸

執行級別2:多使用者狀態(沒有nfs)

執行級別3:完全的多使用者狀態(有nfs),登陸後進入控制台命令列模式

執行級別4:系統未使用,保留

執行級別5:x11控制台,登陸後進入圖形gui模式

執行級別6:系統正常關閉並重啟,預設執行級別不能設為6,否則不能正常啟動

執行級別的原理:

1.在目錄/etc/rc.d/init.d下有許多伺服器指令碼程式,一般稱為服務(service)(注:自己常用的有/etc/init.d/network...)

2.在/etc/rc.d下有7個名為rcn.d的目錄,對應系統的7個執行級別

3.rcn.d目錄下都是一些符號鏈結檔案,這些鏈結檔案都指向init.d目錄下的service指令碼檔案,命名規則為k+nn+服務名或s+nn+服務名,其中nn為兩位數字。

4.系統會根據指定的執行級別進入對應的rcn.d目錄,並按照檔名順序檢索目錄下的鏈結檔案

對於以k開頭的檔案,系統將終止對應的服務

對於以s開頭的檔案,系統將啟動對應的服務

5.檢視執行級別用:runlevel

6.進入其它執行級別用:init n

7.另外init0為關機,init 6為重啟系統

來自知乎

下面是我的理解

init檔名,指的是系統啟動的第乙個指令碼

init.d目錄名,目錄內放的是各個服務的啟動指令碼,比如sshd、httpd等

rcx.d目錄名,後面的x代表著每個執行級別。目錄內有每個服務在init.d內啟動指令碼的鏈結檔案,根據鏈結檔案的名字來的啟動狀態。k開頭表示不啟動服務,s打頭表示啟動服務

rc.local鏈結檔案,指到/etc/rc.d/rc.local。是系統初始化及服務均啟動完畢後,最後執行的乙個指令碼,

一些簡單的指令碼可以放到其中

1、機器開機通電bios質檢,質檢通過後,bios會根據boot選單,選擇從硬碟啟動。

2。讀取硬碟中的mbr(主引導記錄),載入引導程式(linux中是grub),grub程式會載入系統kernel和虛擬檔案系統。

3、系統會執行init程式,該程序會讀取/etc/inittab配置檔案,決定執行級別,執行/etc/rc.d/rc.sysinit指令碼對系統進行初始化,該指令碼會設定系統時間,主機名,開啟卷管理,以讀寫的方式重掛root檔案系統,掛載本地檔案系統,開啟本地磁碟配額,開啟交換空間。

4、執行該執行級別下的/etc/rc.d/rcn.d/下的指令碼,開啟系統服務程序。

5、讀取/etc/rc.d/rc.local下的命令,並逐條執行。

6、啟動虛擬終端,進入登入介面。

1. 想自動啟動乙個應用程式,而應用程式依賴於乙個環境變數

2. 自動啟動的應用程式可以使用ctrl+c終止

對於上面兩個需求,碰到多個問題

1. 將環境變數加入到/etc/profile中,然後/etc/rc.local中使用source將這個環境變數使能,但是由於rc.local指令碼開始是#!bin/sh即為dash而不是bash, 導致從log可以看出rc.local執行失敗,當然最後把#!bin/sh->#!bin/bash即可

#!bin/bash -e

source /etc/profile

(sleep

5cd /usr/local

)&

Linux 開機自啟服務

需求 需要在linux啟動的時候開啟某些服務 比如說 開啟 zookeeper hdfs yarn服務 注意 因為這些服務需要用到ssh通訊所以要保證 ssh服務先啟動,並且網路服務啟動 方法一 非最終解決方法 在 etc rc.local中新增 如果不想將指令碼粘來粘去,或建立鏈結什麼的,則 st...

linux開機服務自啟

有時候我們需要linux系統在開機的時候自動載入某些指令碼或系統服務,主要用三種方式進行這一操作 ln s 在 etc rc.d rc d目錄中建立 etc init.d 服務的軟鏈結 代表0 6七個執行級別之一 chkonfig 命令列執行級別設定 ntsysv 偽圖形執行級別設定 注意 這三種方...

linux開機自啟過程

這是因為因為bios中包含了cpu的相關資訊 裝置啟動順序資訊 硬碟資訊 記憶體資訊 時鐘信 息 pnp特性等等。在此之後,計算機心裡就有譜了,知道應該去讀取哪個硬體裝置了。在bios將系統的控制權交給啟動硬碟第乙個扇區之後,就開始由linux來控制系統了。mbr master boot recor...