Linux設置程序開機自啓動,系統命令chkconfig及linux /etc/rc.d/目錄的詳解

 整理了linux下程序開啓幾種方式,轉載相關博客作統一記錄

 

《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,不然不能正常啓動

2、未掛載程序開機自啓動

未掛載的程序開機自啓動實現方式是編寫程序啓動的.sh腳本,再將此腳本掛載到Linux系統上,讓它開機執行,啓動程序。

實現方式有兩種:簡易版和徹底版

2.1 簡易版

以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

 

2.2 徹底版(掛載tomcat應用)

 編寫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,具體的服務按照具體狀況修改。

 

 

3、每次登錄自動執行

 

也能夠設置每次登陸自動執行腳本,在/etc/profile.d/目錄下新建sh腳本,
/etc/profile會遍歷/etc/profile.d/*.sh

另外,幾個腳本的區別:
(1) /etc/profile: 此文件爲系統的每一個用戶設置環境信息,當用戶第一次登陸時,該文件被執行. 並從/etc/profile.d目錄的配置文件中搜集shell的設置。

(2) /etc/bashrc: 爲每個運行bash shell的用戶執行此文件.當bash shell被打開時,該文件被讀取(即每次新開一個終端,都會執行bashrc)。

(3) ~/.bash_profile: 每一個用戶均可使用該文件輸入專用於本身使用的shell信息,當用戶登陸時,該文件僅僅執行一次。默認狀況下,設置一些環境變量,執行用戶的.bashrc文件。

(4) ~/.bashrc: 該文件包含專用於你的bash shell的bash信息,當登陸時以及每次打開新的shell時,該該文件被讀取。

(5) ~/.bash_logout: 當每次退出系統(退出bash shell)時,執行該文件. 另外,/etc/profile中設定的變量(全局)的能夠做用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承 /etc/profile中的變量,他們是」父子」關係。

(6) ~/.bash_profile: 是交互式、login 方式進入 bash 運行的~/.bashrc 是交互式 non-login 方式進入 bash 運行的一般兩者設置大體相同,因此一般前者會調用後者。

 

 

 

 

 

《linux設置開機服務自動啓動/關閉命令 chkconfig》 轉載自:http://blog.csdn.net/jiangguilong2000/article/details/8259360

 

chkconfig命令主要用來更新(啓動或中止)和查詢系統服務的運行級信息。但chkconfig不會當即自動禁止或激活一個服務,須要服務器重啓才生效。

語法:

   chkconfig --list [name]
    chkconfig --add name
    chkconfig --del name
    chkconfig [--level levels] name <on|off|reset>
    chkconfig [--level levels] name
    chkconfig 沒有參數運行時,顯示用法。若是加上服務名,那麼就檢查這個服務是否在當前運行級啓動。

chkconfig --list :顯示全部運行級系統服務的運行狀態信息(on或off)。若是指定了name,那麼只顯示指定的服務在不一樣運行級的狀態。
>> chkconfig --list
>>chkconfig --list smb
chkconfig --add name:增長一項新的服務。但默認全部級別都關閉狀態
>>chkconfig --add smb
chkconfig [--level levels] name <on|off|reset>:設置某一服務在指定的運行級是被啓動,中止仍是重置。例如,要在3,4,5運行級中止smb服務,則命令以下:
>>chkconfig --level 2345 smb on
表示 2,3,4,5 級別爲啓動
>>chkconfig --level 2345 smb off  
表示2,3,4,5 級別爲關閉
chkconfig --del name:刪除服務
>>chkconfig --del smb
表示刪除smb的服務,固然,確定是關閉了
附加介紹一下Linux系統的運行級的概念:

    Linux中有多種運行級,常見的就是多用戶的2,3,4,5 ,不少人知道5是運行X-Windows的級別,而0就是關機了。

linux 系統默認運行級別,命令方式一般是3,圖形方式一般是5,/etc/inittab裏的initdefault就知道了

0 爲停機,機器關閉。(千萬不要把initdefault設置爲0,不然系統將沒法啓動)
1 爲單用戶模式,就像Win9x下的安全模式相似。
2 爲多用戶模式,可是沒有NFS支持。
3 爲完整的多用戶模式,是標準的運行級。
4 通常不用,在一些特殊狀況下能夠用它來作一些事情。例如在筆記本電腦的電池用盡時,能夠切換到這個模式來作一些設置。
5 就是X11,進到X Window系統了。
6 爲重啓,運行init 6機器就會重啓。(千萬不要把initdefault設置爲6,不然系統將無限重啓 )
 

 

 

linux /etc/rc.d/目錄的詳解轉載自:https://www.cnblogs.com/MartinChentf/p/6060252.html

 

本文包括3部份內容
一、        Linux的引導過程
二、        運行級別
三、        /etc/rc.d/ 與/etc/rc.d/init.d的關係
都僅限於自身的理解,若有差錯和不足的地方請指正和補充!一塊兒學習,一塊兒進步。

「/etc/rc.d/init.d/目錄下的腳本就相似與windows中的註冊表,在系統啓動的時候某些指定腳本將被執行」。開始以前,先引用李善明經理昨天晚上總結時的一個理解,讓你們先對init.d目錄有個大概的印象。在進入init.d以前,咱們一塊兒來作兩個準備工做,linux的引導過程和運行級別的概念。

1、        Linux的引導過程
    系統啓動以後,在進入init.d以前,咱們先來看看系統都作了什麼工做, 系統加電以後,首先進行的硬件自檢,而後是bootloader對系統的初始化,加載內核。
    內核被加載到內存中以後,就開始執行了。一旦內核啓動運行,對硬件的檢測就會決定須要對哪些設備驅動程序進行初始化。從這裏開始,內核就可以掛裝根文件系統(這個過程相似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統,並已初始化全部的設備驅動程序和數據結構等以後,就經過啓動一個叫init的用戶級程序,完成引導進程。

2、        運行級別(run level)
    Init進程是系統啓動以後的第一個用戶進程,因此它的pid(進程編號)始終爲1。init進程上來首先作的事是去讀取/etc/目錄下inittab文件中initdefault id值,這個值稱爲運行級別(run-level)。它決定了系統啓動以後運行於什麼級別。運行級別決定了系統啓動的絕大部分行爲和目的。這個級別從0到6 ,具備不一樣的功能。不一樣的運行級定義以下: 
  # 0 - 停機(千萬別把initdefault設置爲0,不然系統永遠沒法啓動)
  # 1 - 單用戶模式
  # 2 - 多用戶,沒有 NFS
  # 3 - 徹底多用戶模式(標準的運行級)
  # 4 – 系統保留的
  # 5 - X11 (x window)
  # 6 - 從新啓動 (千萬不要把initdefault 設置爲6,不然將一直在重啓 )
級別3啓動的將是文本界面,級別5啓動的將是圖形界面。

3、        /etc/rc.d/與/etc/rc.d/init.d的關係
    寫到這裏,應該差很少要進入init.d了,但是我以爲單寫/etc/rc.d/init.d的話不必定能說得清楚明白,就拿它跟/etc/rc.d這個它上一級的目錄一塊兒來討論,可能比較合適一些,由於他們之間有着千絲萬縷的關係。
    在這裏先解釋一下init.d裏面放的都是什麼東西。這個目錄存放的是一些腳本,通常是linux以rpm包安裝時設定的一些服務的啓動腳本。系統在安裝時裝了好多rpm包,這裏面就有不少對應的腳本。執行這些腳本能夠用來啓動,中止,重啓這些服務。
前面說到,/etc/rc.d/init.d這個目錄下的腳本就相似與windows中的註冊表,在系統啓動的時候執行。程序運行到這裏(init進程讀取了運行級別),相信從命名的角度你們也能猜到該運行/etc/rc.d/init.d裏面的腳本了,否則它爲何也叫init(.d)呢是吧。沒錯,是該運行init.d裏的腳本了,可是並非直接運行,而是有選擇的由於系統並不須要啓動全部的服務。
    那麼,系統是如何選擇哪些須要啓動哪些不要呢?這時剛纔說的運行級別就起做用了。
    在決定了系統啓動的run level以後,/etc/rc.d/rc這個腳本先執行。在RH9和FC7的源碼中它都是一上來就check_runlevel()(雖然實現的代碼不同,也大同小異),知道了運行級別以後,對於每個運行級別,在rc.d下都有一個子目錄分別是rc0.d,rc1.d ….. rc6.d。每一個目錄下都是到init.d目錄的一部分腳本一些連接。每一個級別要執行哪些服務就在相對應的目錄下,好比級別5要啓動的服務就都放在rc5.d下,可是放在這個rc5.d下的都是一些連接文件,連接到init.d中相對應的文件,真正幹活的init.d裏的腳本。

    到這裏,估計你們可能都比較清楚了,我開始也覺得是這樣的。但是後來我仔細看過和比較這些連接文件和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 選項說明

 

 服務器上能夠找到這個目錄:/etc/rc.d/init.d。實際上不管init.d放在什麼地方,它都發揮着相同的做用。

 爲了可以使用init.d目錄下的腳本,你須要有root權限或sudo權限。每一個腳本都將被做爲一個命令運行,該命令的結構大體以下所示:

 /etc/init.d/command 選項

     comand是實際運行的命令,選項能夠有以下幾種:

  • start
  • stop
  • reload
  • restart
  • force-reload

   大多數的狀況下,你會使用start,stop,restart選項。例如,若是你想關閉網絡,你可使用以下形式的命令:

   /etc/init.d/networking stop

  又好比,你改變了網絡設置,而且須要重啓網絡。你可使用以下命令:

   /etc/init.d/networking restart

 
 
相關文章
相關標籤/搜索