《linux程序設置開機自啓動》轉載自:https://www.cnblogs.com/flcz/p/7691532.htmlhtml
注意:linux
做者測試時,Linux版本爲RedHat6,同時應用在CentOS6應該也能夠(做者未實測,但有同事在CentOS6上使用可行),系統版本的不一樣,可能形成操做上的差別(CentOS7就與CentOS6有較大的不一樣),但具體的思路可借鑑。shell
如下操做均在root權限下apache
Linux下配置某個服務的開機自啓動,分爲兩種狀況:一種是已經掛載的(註冊爲linux的服務),另外一種是未掛載的。windows
已經掛載的程序可使用 chkconfig命令查到運行等級,如httpd服務瀏覽器
執行命令:tomcat
#chkconfig --list |grep httpd安全
打印信息:bash
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off服務器
未掛載的程序,不會打印任何信息,如Tomcat
執行chkconfig --list |grep tomcat,沒有打印任何信息
以httpd服務舉例。
在root用戶下打開一個終端。
執行命令:
chkconfig --list |grep httpd
能夠看到0~6都是off。
執行命令:
# chkcongfig httpd on
執行命令:
chkconfig --list |grep httpd
執行完chkcongfig httpd on後,2~5對應的值變成了on.
此時咱們經過service httpd status 查看http服務狀態,是stopped狀態,沒有開機自啓動,此時咱們重啓Linux電腦,再來查看httpd服務是否開機啓動
重啓Linux,查看httpd服務狀態:service httpd status,能夠看到httpd服務已經啓動
知識擴展:
執行chkcongfig httpd on 能夠加--level參數,指定將0~6哪些級別開啓,命令格式以下:
# chkcongfig --level 345 httpd on
345就是須要開啓(由off變成on)的數字,而不加—level參數時,默認打開的是2~5
0~6對應的運行級別以下:
Linux系統有7個運行級別(runlevel)
運行級別0:系統停機狀態,系統默認運行級別不能設爲0,不然不能正常啓動
運行級別1:單用戶工做狀態,root權限,用於系統維護,禁止遠程登錄
運行級別2:多用戶狀態(沒有NFS)
運行級別3:徹底的多用戶狀態(有NFS),登錄後進入控制檯命令行模式
運行級別4:系統未使用,保留
運行級別5:X11控制檯,登錄後進入圖形GUI模式
運行級別6:系統正常關閉並重啓,默認運行級別不能設爲6,不然不能正常啓動
未掛載的程序開機自啓動實現方式是編寫程序啓動的.sh腳本,再將此腳本掛載到Linux系統上,讓它開機執行,啓動程序。
實現方式有兩種:簡易版和徹底版
以Tomcat服務爲例
步驟以下:
編寫腳本start.sh,位置爲/app/start.sh
可自定義腳本位置和腳本名字,此處的app只是做者在根目錄下自建的一個文件夾
腳本內容爲:
#!/bin/bash
export JDK_HOME=/app/jdk1.7.0_71
export JAVA_HOME=/app/jdk1.7.0_71
/app/bim/apache-tomcat-7.0.63/bin/startup.sh
內容解析:
export JDK_HOME,export JAVA_HOME爲安裝的JDK地址,若是沒有JDK,只有JRE,配置也可
/app/bim/apache-tomcat-7.0.63/bin/startup.sh 此爲Tomcat運行時startup.sh所在的路徑。
上述三個值均應按照你實際狀況填寫。同時配置export 是由於Tomcat運行時須要Java_home環境,若是你運行的程序須要的環境不一樣,根據你的實際狀況填寫export,若是不須要額外環境,也就不用寫export
執行以下命令,將該腳本標記爲可執行文件(添加可執行的權限)
chmod +x /app/start.sh
執行以下命令將/etc/rc.d/rc.local文標記爲可執行文件
chmod +x /etc/rc.d/rc.local
打開/etc/rc.d/rc.local文件,在最後加上以下腳本:
/app/start.sh
測試:重啓服務器
執行命令:
ps -ef |grep tomcat
打印Tomcat啓動的詳細信息表示啓動成功。
Tomcat還能用瀏覽器輸入localhost:8080來訪問,確認是否啓動成功(若是沒有改動啓動端口,默認是8080,若有改動,請按照實際狀況填寫。啓動端口能夠經過Tomcat 的conf文件夾下server.xml文件查到)
補充:
簡易版還有一種可行的辦法:
在 /etc/rc.d/rc.local 中添加腳本
export JAVA_HOME=/app/jdk1.7.0_71
/app/bim/apache-tomcat-7.0.63/bin/startup.sh
取值說明:
/app/jdk1.7.0_71 JDK安裝位置
/app/bim/apache-tomcat-7.0.63/bin/startup.sh Tomcat 啓動startup.sh文件路徑
執行以下命令將/etc/rc.d/rc.local文標記爲可執行文件
chmod +x /etc/rc.d/rc.local
編寫shell腳本
在/etc/init.d下新建一個文件tomcat,打開,添加以下內容:
#!/bin/sh
# chkconfig: 345 99 10
# description: Auto-starts tomcat
# /etc/init.d/tomcatd
# Tomcat auto-start
# Source function library.
#. /etc/init.d/functions
# source networking configuration.
#. /etc/sysconfig/network
RETVAL=0
export JAVA_HOME=/app/jdk1.7.0_71
export JRE_HOME=/app/jdk1.7.0_71/jre
export CATALINA_HOME=/app/bim/apache-tomcat-7.0.63
export CATALINA_BASE=/app/bim/apache-tomcat-7.0.63
start()
{
if [ -f $CATALINA_HOME/bin/startup.sh ];
then
echo $"Starting Tomcat"
$CATALINA_HOME/bin/startup.sh
RETVAL=$?
echo " OK"
return $RETVAL
fi
}
stop()
{
if [ -f $CATALINA_HOME/bin/shutdown.sh ];
then
echo $"Stopping Tomcat"
$CATALINA_HOME/bin/shutdown.sh
RETVAL=$?
sleep 1
ps -fwwu root | grep tomcat|grep -v grep | grep -v PID | awk '{print $2}'|xargs kill -9
echo " OK"
# [ $RETVAL -eq 0 ] && rm -f /var/lock/...
return $RETVAL
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
echo $"Restaring Tomcat"
$0 stop
sleep 1
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit $RETVAL
注意文檔中紅色的部分:
export JAVA_HOME=/app/jdk1.7.0_71
JDK安裝路徑
export JRE_HOME=/app/jdk1.7.0_71/jre
JRE 所在路徑
export CATALINA_HOME=/app/bim/apache-tomcat-7.0.63
Tomcat程序所在路徑
export CATALINA_BASE=/app/bim/apache-tomcat-7.0.63
Tomcat程序所在路徑
-f $CATALINA_HOME/bin/startup.sh
此處CATALINA_HOME就是拿的上面咱們賦的值,加上bin/startup.sh就是Tomcat啓動腳本startup.sh所在的路徑,包括後面的shutdown.sh,這個腳本就是這樣實現了Tomcat的開啓和關閉,而重啓restart只不過是先調用shutdown.sh,再調用startup.sh。
保存退出以後,給腳本文檔增長可執行權限
執行命令:
chmod +x /etc/init.d/tomcat
掛載,執行命令:
ln -s /etc/init.d/tomcat /etc/rc2.d/S16Tomcat
#S:開機自啓動 K:中止 100:啓動順序 ,具體內容看下面的轉載說明
設置開機自啓動,執行命令
chkconfig --add tomcat
此時咱們使用chkconfig --list |grep tomcat命令,能夠發現Tomcat加入了chkconfig,也就能經過修改其運行等級來實現開機啓動與否。並且Tomcat可使用service tomcat start/stop/restart命令進行開啓/關閉/重啓。
重啓電腦,驗證Tomcat是否開機重啓。
其餘程序的腳本文件可能會有些變化,好比說有些程序沒有自帶的關閉腳本(如Tomcat的shutdown.sh腳本),也有可能啓動腳本的名字不叫start.sh,具體的服務按照具體狀況修改。
《linux設置開機服務自動啓動/關閉命令 chkconfig》 轉載自:http://blog.csdn.net/jiangguilong2000/article/details/8259360
《linux /etc/rc.d/目錄的詳解》轉載自:https://www.cnblogs.com/MartinChentf/p/6060252.html
到這裏,估計你們可能都比較清楚了,我開始也覺得是這樣的。但是後來我仔細看過和比較這些連接文件和init.d裏真正被執行的腳本的文件名以後,一直有幾個問題沒弄明白。藉着寫這個文章的機會,我作了一些功課,總算是大概解開了那些疑惑。
一、這些連接文件前面爲何會帶一個Kxx或者Sxx呢?
是這樣的,帶K的表示中止(Kill)一個服務,S表示開啓(Start)的意思,有說以K開頭的腳本運行在以S開頭的腳本以前
二、K和S後面帶的數字呢?幹什麼用的
這個我開始的時候還覺得是排列起來好看或者數數用呢(是否是很幼稚?)。後來發現不是的。它的做用是用來排序,就是決定這些腳本執行的順序,數值小的先執行,數值大的後執行。不少時候這些執行順序是很重要的,好比要啓動Apache服務,就必須先配置網絡接口,否則一個沒有IP的機子來啓動http服務那豈不是很搞笑。。。
三、無心中我發現同一個服務帶S的和帶K的連接到init.d以後是同一個腳本。我就納悶了,爲何會是執行同一個腳本呢?
這個時候真是S和K的妙用了,原來S和K並不止是用來看起來分的清楚而已。S給和K還分別給init.d下面的腳本傳遞了start和stop的參數。哦,是這樣的(煥然大悟的樣子,呵呵)!這時我纔想起來原來曾經無數用過的/etc/rc.d/init.d/network restart命令。原來傳S時至關於執行了/etc/rc.d/init.d/xxx start這條命令,固然K就至關於/etc/rc.d/init.d/xxx stop了。
rc.d的內容以下:
init.d/ :各類服務器和程序的二進制文件存放目錄。
rcx.d/: 各個啓動級別的執行程序鏈接目錄。裏頭的東西都是指向init.d/的一些軟鏈接。具體的後邊敘述。
還有三個腳本:rc.sysinit, rc, rc.local
redhat的啓動方式和執行次序是:
加載內核
執行init程序
/etc/rc.d/rc.sysinit # 由init執行的第一個腳本
/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL爲缺省的運行模式
/etc/rc.d/rc.local
/sbin/mingetty # 等待用戶登陸
在Redhat中,/etc/rc.d/rc.sysinit主要作在各個運行模式中相同的初始化工做,包括:
調入keymap以及系統字體
啓動swapping
設置主機名
設置NIS域名
檢查(fsck)並mount文件系統
打開quota
裝載聲卡模塊
設置系統時鐘
等等。
/etc/rc.d/rc則根據其參數指定的運行模式(運行級別,你在inittab文件中能夠設置)來執行相應目錄下的腳本。凡是以Kxx開頭的
,都以stop爲參數來調用;凡是以Sxx開頭的,都以start爲參數來調用。調用的順序按xx 從小到大來執行。
例如,假設缺省的運行模式是3,/etc/rc.d/rc就會按上述方式調用
/etc/rc.d/rc3.d/下的腳本。
值得一提的是,Redhat中的運行模式二、三、5都把/etc/rc.d/rc.local作爲初始化腳本中
的最後一個,因此用戶能夠本身在這個文件中添加一些須要在其餘初始化工做以後,登陸以前執行的命令。
init在等待/etc/rc.d/rc執行完畢以後(由於在/etc/inittab中/etc/rc.d/rc的action是wait),將在指定的各個虛擬終端上運行/sbin/mingetty,等待用戶的登陸。
至此,LINUX的啓動結束。
最後本身補充一些:
1. 許多網絡服務都由超級服務/etc/rc.d/init.d/xinetd啓動,這些服務的配置文件在/etc/xinetd.d/目錄下,
如telnet就是由xinetd啓動的,其配置文件以下(fc7)
1 # default: on
2 # description: The telnet server serves telnet sessions; it uses /
3 # unencrypted username/password pairs for authentication.
4 service telnet
5 {
6 flags = REUSE
7 socket_type = stream
8 wait = no
9 user = root
10 server = /usr/sbin/in.telnetd
11 log_on_failure += USERID
12 disable = no
13 }
修改配置文件之後,重啓xinetd服務便可.
2. 除了直接調用腳本外(如/etc/rc.d/init.d/xinetd),還能夠用service命令來控制init.d目錄下的服務,
如 service xinetd restart,
補充:/etc/init.d/command 選項說明
爲了可以使用init.d目錄下的腳本,你須要有root權限或sudo權限。每一個腳本都將被做爲一個命令運行,該命令的結構大體以下所示:
/etc/init.d/command 選項
comand是實際運行的命令,選項能夠有以下幾種:
大多數的狀況下,你會使用start,stop,restart選項。例如,若是你想關閉網絡,你可使用以下形式的命令:
/etc/init.d/networking stop
又好比,你改變了網絡設置,而且須要重啓網絡。你可使用以下命令:
/etc/init.d/networking restart