ubuntu中將某一程序設置為開機啟動項的方法


一、簡要說明

Linux操作系統的引導加載程序(對個人電腦而言通常是LILO)開始,介紹Linux開機引導的步驟。

加載內核
LILO啟動之后,如果你選擇了Linux作為准備引導的操作系統,第一個被加載的東西就是內核。請記住此時的計算機內存中還不存在任何操作系統,PC(因為它們天然的設計缺陷)也還沒有辦法存取機器上全部的內存。因此,內核就必須完整地加載到可用RAM的第一個兆字節之內。為了實現這個目的,內核是被壓縮了的。這個文件的頭部包含着必要的代碼,先設置CPU進入安全模式(以此解除內存限制),再對內核的剩余部分進行解壓縮。

執行內核
內核在內存中解壓縮之后,就可以開始運行了。此時的內核只知道它本身內建的各種功能,也就是說被編譯為模塊的內核部分還不能使用。最基本的是,內核必須有足夠的代碼設置自己的虛擬內存子系統和根文件系統(通常就是ext2文件系統)。一旦內核啟動運行,對硬件的檢測就會決定需要對哪些設備驅動程序進行初始化。從這里開始,內核就能夠掛裝根文件系統(這個過程類似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統之后,將啟動並運行一個叫做init的程序。

注意:在這里我們故意略去了Linux內核啟動的許多細節,這些細節只有內核開發人員才感興趣。如果你好奇的話,可以訪問http://www.redhat.com:8080地址處的"Kernel Hackers Guide"。

init進程
init進程是非內核進程中第一個被啟動運行的,因此它的進程編號PID的值總是1。init讀它的配置文件/etc/inittab,決定需要啟動的運行級別(Runlevel)。從根本上說,運行級別規定了整個系統的行為,每個級別(分別由0到6的整數表示)滿足特定的目的。如果定義了initdefault級別,這個值就直接被選中,否則需要由用戶輸入一個代表運行級別的數值。
輸入代表運行級別的數字之后,init根據/etc/inittab文件中的定義執行一個命令腳本程序。缺省的運行級別取決於安裝階段對登錄程序的選擇:是使用基於文本的,還是使用基於X-Window的登錄程序。
rc命令腳本程序我們已經知道,當運行級別發生改變時,將由/etc/inittab文件定義需要運行哪一個命令腳本程序。這些命令腳本程序負責啟動或者停止該運行級別特定的各種服務。由於需要管理的服務數量很多,因此需要使用rc命令腳本程序。其中,最主要的一個是/etc/rc.d/rc,它負責為每一個運行級別按照正確的順序調用相應的命令腳本程序。我們可以想象,這樣一個命令腳本程序很容易變得難以控制!為了防止這類事件的發生,需要使用精心設計的方案。

對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行級別的下級子目錄的命名方法是rcX.d,其中的X就是代表運行級別的數字。比如說,運行級別3的全部命令腳本程序都保存在/etc/rc.d/rc3.d子目錄中。需要注意的是,在每個rc (1-6).d文件夾下的文件其實都是/etc/init.d文件夾下的文件的一個軟連接(類似windows中的快捷方式),也就是說,在 /etc/init.d文件夾下是全部的服務程序,而每個rc(1-6).d只鏈接它自己啟動需要的相應的服務程序!

還需要注意的一點是,在rcX.d里,每個鏈接的名字都是以S或者K開頭的,S開頭的表示是系統啟動是要隨機啟動的,K開頭的是不隨機啟動的。這樣,你就可以知道,如果我要哪個服務隨機啟動,就把它名字第一個字母K改成S就可以了,當然,把S改成K后,這個服務就不能隨機啟動了。因此,我這個鏈接還要起名為SXXX,這樣系統才能讓它隨機啟動。

 

二、添加隨機啟動腳本方法,

1) 一般應用程序會有自己的啟動腳本文件,所以直接復制到/etc/init.d文件夾中,如果自己寫,把寫好的腳本放到/etc/init.d文件夾中

寫腳本的方法簡單舉例:

想要把mongod服務程序弄成開機啟動,首先要查找mongod程序在哪?使用命令是locate monggod,詳細用法,使用幫助文檔或者上網自行搜索。找到是在/usr/bin/mongod

所以腳本文件名為mongod就可以寫成如下:

#!/bin/bash
/usr/bin/mongod

第一行是聲明用什么解釋器運行這個腳本,第二行就是要運行的命令。

 

2)添加鏈接到rcN.d文件夾中

update-rc.d命令,是用來自動的升級System V類型初始化腳本,簡單的講就是,哪些東西是你想要系統在引導初始化的時候運行的,哪些是希望在關機或重啟時停止的,可以用它來幫你設置。這些腳本的連接位於/etc/rcn.d/LnName,對應腳本位於/etc/init.d/Script-name.
1、設置指定啟動順序、指定運行級別的啟動項:
update-rc.d <service> start <order> <runlevels>
2、設置在指定運行級中,按指定順序停止:
update-rc.d <service> stop <order> <runlevels>
3、從所有的運行級別中刪除指定的啟動項:
update-rc.d -f <script-name> remove
例如:
update-rc.d script-name start 90 1 2 3 4 5 . stop 52 0 6 .
start 90 1 2 3 4 5 . : 表示在1、2、3、4、5這五個運行級別中,按先后順序,由小到大,第90個開始運行這個腳本。
stop 52 0 6 . :表示在0、6這兩個運行級別中,按照先后順序,由小到大,第52個停止這個腳本的運行。

 

方法二:比較方便的做法是,mongod是在/etc/init.d/文件夾下的mongod腳本

update-rc.d mongod defaults

 

三、啟動服務

/etc/init.d/mongod start

 

四、查看隨機啟動的服務項

chkconfig --list

可能輸出如下:
openvpn 0:關閉 1:開啟 ...... 6:關閉 (0-6 為啟動級別 ; 關閉/開啟為相應級別下該服務的自動啟動選項)

 

如果希望對自動啟動選項做出改變,命令格式為:
chkconfig --level x name on/off

例如:chkconfig --level 5 openvpn off

 

如果想要查看指定的應用程序是否開機啟動,命令格式如下:

chkconfig --list mysql

響應說明和不帶指定名一樣。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM