[啓動]Linux啓動流程rcN.d rcS.d rc.local等

Linux嵌入式相關項目走到最後很難避開要開機自啓一些應用程序或者腳本等,最近也在幫助同事作這個事情,之前本身玩板子的時候都是較爲隨便的在/etc/rc.local中添加就能夠了,可是項目的話仍是走標準一些,不只爲了本身之後的維護,也爲了之後同事的維護。因此分享下面的文章linux

推薦:shell

啓動腳本和service、chkconfig:http://blog.csdn.net/taiyang1987912/article/details/41698817ubuntu

轉自http://blog.csdn.net/listener_ri/article/details/45128569bash

當前系統環境爲:Linux mint mate 17.1(基於ubuntu14.04的衍生版)網絡

首先架構

/etc/rc*.d文件夾中的腳本文件的連接目標爲:/etc/init.d文件夾下的腳本(*爲系統運行級別‘數字’和字母:S,系統優先運行rcS.d目錄下的腳本,而後運行rcN.d下的腳本)app

/etc/inittab: inittab爲系統的PID=1的進程,決定這系統啓動調用哪些啓動腳本文件ide

1.Linux系統主要經過如下步驟啓動

  1. 啓動Boot Manager
  2. 加載系統內核,啓動init進程, init進程是Linux的根進程,全部的系統進程都是它的子進程。
  3. init進程讀取「/etc/inittab」文件中的信進入inittab中預設的運行級別,按順序運行該運行級別對應文件夾(init*.d)下的腳本。腳本一般以「start」參數啓動,並指向一個系統中的程序。一般狀況下,「/etc/rcS.d/」目錄下的啓動腳本首先被執行,而後是「/etc/rcN.d/」目錄。例如您設定的運行級別爲3,那麼它對應的啓動目錄爲「/etc/rc3.d/」。
  4. 根據「/etc/rcS.d/」文件夾中對應的腳本啓動Xwindow服務「xorg」      Xwindow爲Linux下的圖形用戶界面系統。
  5. 啓動登陸管理器,等待用戶登陸

1.1.系統服務

在運行級別對應的文件夾中,您能夠看到許多文件名以「S##」和「K##」起始的啓動腳本連接測試

init 進程將以「start」爲參數,按文件名順序執行全部以「S##」起始的腳本。腳本名稱中的數字越小,它將被越早執行。網站

例如在 「/etc/rc2.d/」文件夾中,「S13gdm」文件名中的數字小於「S23xinetd」,「S13gdm」將比「S23xinetd」先執行。

若是一個腳本連接,以「K##」起始,表示它將以「stop」參數被執行。若是相應服務沒有啓動,則不執行該腳本。

1.2.手動控制服務

你能夠手動運行帶有如下參數的啓動腳本,來控制系統服務。
start 啓動
stop 中止
restart 重啓

例如:
/etc/rc2.d/K20powernowd start
有 時您並不清楚當前運行級別,該運行級別下未必有相應腳本;並且此類腳本的前三位字符並不固定,不便於記憶。

這時,您能夠直接使用 「/etc/init.d/」文件夾中的啓動腳本(由於「/etc/rcX.d/」中的啓動腳本都是連接到「/etc/init.d/」文件夾下相應腳本)

具體都有那些系統服務腳本,能夠看另外一篇文章:《ubuntu中init.d文件夾中經常使用系統服務腳本》

2.Ubuntu系統架構關於啓動項大體分爲四類,每一類都分爲系統級和用戶級

  • 第一類upstart,或者叫job,由init管理,配置文件目錄/etc/init,~/.init
  • 第二類叫service,由rc.d管理,配置文件目錄/etc/init.d,以及/etc/rc.local文件
  • 第三類叫cron,由contab管理,使用crontab進行配置
  • 第四類叫startup,由xdg管理,配置文件目錄/etc/xdg/autostart,以及~/.config/autostart

upstart任務適用於runlevel<5的腳本和程序,service任務適用於runlevel<=5的任務,cron任務則不必定,而startup通常工做在runlevel=5,也就是桌面級。

對於普通用戶而言,你的桌面級應用應該使用startup,服務級應用(好比某些功能性的軟件腳本)應該使用service,常規性配置可使用cron,而與啓動順序有關的最好使用upstart。

2.1. 開機啓動時自動運行程序

Linux加載後, 它將初始化硬件和設備驅動, 而後運行第一個進程init。init根據配置文件繼續引導過程,啓動其它進程。一般狀況下,修改放置在

  • /etc/rcN.d
  • /etc/rcS.d

目錄下的腳本文件,可使init自動啓動其它程序。例如:編輯/etc/rcS.d/rc.local(也就是/etc/rc.local,由於rcS.d連接目標爲/etc) 文件(該文件一般是系統最後啓動的腳本),

在文件最末加上一行「xinit」或「startx」,能夠在開機啓動後直接進入X-Window。

2.2. 登陸時自動運行程序

用戶登陸時,bash先自動執行系統管理員創建的全局登陸script :

/ect/profile(大多在此文件中設置環境變量,它是整個桌面環境使用的一個shell進程,也就是登陸shell

>>>在linux中的shell能夠分爲:登陸shell,非登陸交互式shell,非登陸非交互式shell(執行shell腳本),

>>>具體能夠查看另外一篇文章:《 linux中各個shell配置文件的做用域和啓動時間 》

而後bash在用戶起始目錄下按順序查找三個特殊文件中的一個:

  • /.bash_profile、
  • /.bash_login、
  • /.profile,

但只執行最早找到的一個。所以,只需根據實際須要在上述文件中加入命令就能夠實現用戶登陸時自動運行某些程序(相似於DOS下的Autoexec.bat)。

2.3. 退出登陸時自動運行程序

退出登陸時,bash自動執行我的的退出登陸腳本

  • /.bash_logout。

例如,在/.bash_logout中加入命令「tar -cvzf c.source.tgz *.c」,則在每次退出登陸時自動執行 「tar」 命令備份 *.c 文件。

2.4. 按期自動運行程序

Linux有一個稱爲crond的守護程序,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令文件的內容,並在設定的時間執行這些文件中的命令。用戶能夠經過crontab 命令來創建、修改、刪除這些命令文件。

例如,創建文件crondFile,內容爲「00 9 23 Jan * HappyBirthday」,運行「crontabcronFile」命令後,每當元月23日上午9:00系統自動執行「HappyBirthday」的程序(「*」表示無論當天是星期幾)。

2.5. 定時自動運行程序一次

定時執行命令at 與crond 相似(但它只執行一次):命令在給定的時間執行,但不自動重複。at命令的通常格式爲:at [ -f file ] time ,在指定的時間執行file文件中所給出的全部命令。也可直接從鍵盤輸入命令:

$ at 12:00
at>mailto Roger -s ″Have a lunch″ < plan.txt
at>Ctr-D
Job 1 at 20001109 12:00

 

2000-11-09 12:00時候自動發一標題爲「Have a lunch」,內容爲plan.txt文件內容的郵件給Roger.

3.Ubuntu下添加開機啓動腳本

方式1:rc.local

Ubuntu開機以後會執行/etc/rc.local文件中的腳本,因此咱們能夠直接在/etc/rc.local中添加啓動腳本。

固然要添加到語句:exit 0 前面才行。

方式2:rcN.d

若是要添加爲開機啓動執行的腳本文件,可先將腳本複製或者軟鏈接到/etc/init.d/目錄下,而後用:update-rc.d xxx defaults NN命令(NN爲啓動順序),將腳本添加到初始化執行的隊列中去。

注意若是腳本須要用到網絡,則NN需設置一個比較大的數字,如98 。

  • 將腳本設爲可執行權限,並拷貝至/etc/init.d
  • 在/etc/init.d路徑下執行update-rc.d script-name start 98 5 . 注:98爲順序,5爲rc5.d,符號.不要忘記
  • 這樣會在會在/etc/rc5.d/下面建立1個符號連接,有必要在腳本的前段加一些provider/start-default等說明,不然報警,在Ubuntu上測試成功
  • 在am4378上沒有測試成功 T_T.

另一種是

  • 將腳本設爲可執行
  • 在rcN.d下執行ln ../init.d/script-name S99script
  • 在Ubuntu上沒有成功,不知爲什麼

方式3:systemd

相關文章
相關標籤/搜索