天天看點

【Linux開發】Linux啟動腳本設定

前言

linux有自己一套完整的啟動 體系,抓住了linux啟動 的脈絡,linux的啟動 過程将不再神秘。

閱讀之前建議先看一下附圖。

本文中假設inittab中設定的init tree為:

/etc/rc.d/rc0.d

/etc/rc.d/rc1.d

/etc/rc.d/rc2.d

/etc/rc.d/rc3.d

/etc/rc.d/rc4.d

/etc/rc.d/rc5.d

/etc/rc.d/rc6.d

/etc/rc.d/init.d

目錄 

1. 關于linux的啟動 

2. 關于rc.d

3. 啟動 腳本 示例

4. 關于rc.local

5. 關于bash啟動 腳本 

6. 關于開機程式的自動啟動 

init是所有程序之父 

init讀取/etc/inittab,執行rc.sysinit腳本 

(注意檔案名是不一定的,有些unix甚至會将語句直接寫在inittab中)

rc.sysinit腳本 作了很多工作:

init $PATH

config network

start swap function

set hostname

check root file system, repair if needed

check root space

....

rc.sysinit根據inittab執行rc?.d腳本 

linux是多使用者系統,getty是多使用者與單使用者的分水嶺

在getty之前運作的是系統腳本 

2. 關于rc.d 

所有啟動 腳本 放置在

/etc/rc.d/init.d下 

rc?.d中放置的是init.d中腳本 的連結,命名格式是:

S{number}{name}

K{number}{name}

S開始的檔案向腳本 傳遞start參數

K開始的檔案向腳本 傳遞stop參數

number決定執行的順序

3. 啟動 腳本 示例 

這是一個用來啟動 httpd的

/etc/rc.d/init.d/apache 腳本 :

CODE:

#!/bin/bash

source /etc/sysconfig/rc

source $rc_functions

case "$1" in

start)

echo "Starting Apache daemon..."

/usr/local/apache2/bin/apachectl -k start

evaluate_retval

;;

stop)

echo "Stopping Apache daemon..."

/usr/local/apache2/bin/apachectl -k stop

restart)

echo "Restarting Apache daemon..."

/usr/local/apache2/bin/apachectl -k restart

status)

statusproc /usr/local/apache2/bin/httpd

*)

echo "Usage: $0 {start|stop|restart|status}"

exit 1

esac

[Copy to clipboard]

可以看出他接受start,stop,restart,status參數

然後可以這樣建立rc?.d的連結:

cd /etc/rc.d/init.d &&

ln -sf ../init.d/apache ../rc0.d/K28apache &&

ln -sf ../init.d/apache ../rc1.d/K28apache &&

ln -sf ../init.d/apache ../rc2.d/K28apache &&

ln -sf ../init.d/apache ../rc3.d/S32apache &&

ln -sf ../init.d/apache ../rc4.d/S32apache &&

ln -sf ../init.d/apache ../rc5.d/S32apache &&

ln -sf ../init.d/apache ../rc6.d/K28apache

經常使用的 rc.local 則完全是習慣問題,不是标準。

各個發行版有不同的實作方法,可以這樣實作:

touch /etc/rc.d/rc.local

chmod +x /etc/rc.d/rc.local

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc1.d/S999rc.local &&

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc2.d/S999rc.local &&

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc3.d/S999rc.local &&

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc4.d/S999rc.local &&

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc5.d/S999rc.local &&

ln -sf /etc/rc.d/rc.local /etc/rc.d/rc6.d/S999rc.local

/etc/profile 

/etc/bashrc

~/.bash_profile

~/.bashrc

是bash的啟動 腳本 

一般用來設定單使用者的啟動 環境,也可以實作開機單使用者的程式,但要明确他們都是屬于bash範疇而不是系統範疇。

他們的具體作用介紹如下:

/bin/bash這個指令解釋程式(後面簡稱shell)使用了一系列啟動 檔案來建立一個運作環境:

~/.bash_logout 

每一個檔案都有特殊的功用并對登陸和互動環境有不同的影響。

/etc/profile 和

~/.bash_profile 是在啟動 一個互動登陸shell的時候 被調用。

/etc/bashrc 和 ~/.bashrc 是在一個互動的非登陸shell啟動 的時候 被調用。

~/.bash_logout 在使用者登出登陸的時候 被讀取

一 個互動的登陸shell會在 /bin/login 成功登陸之後運作。一個互動的非登陸shell是通過指令行來運作的,如[prompt]$/bin/bash。一般一個非互動的shell出現在運作 shell腳本 的時候 。之是以叫非互動的shell,是因為它不在指令行上等待輸入而隻是執行腳本 程式。

系統腳本 可以放置在/etc/rc.d/init.d中并建立/etc/rc.d/rc?.d連結,也可以直接放置在/etc/rc.d/rc.local中。

init.d腳本 包含完整的start,stop,status,reload等參數,是标準做法,推薦使用。 

為特定使用者使用的程式(如有的使用者需要使用中文輸入法而有的不需要)放置在~/中的bash啟動 腳本 中。

繼續閱讀