歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Shell腳本安裝成服務加入系統啟動

Shell腳本安裝成服務加入系統啟動

日期:2017/3/3 11:36:06   编辑:SHELL編程

背景:Shell腳本是linux運維人員必備利器,怎麼樣把shell腳本安裝成服務且加入系統啟動,然後就可以使用服務來管理,這是一個很重要的問題。

當我們運行安裝服務的命令時候,假設服務名為myservice

#chkconfig --add myservice
常常會出現
service myservice does not support chkconfig

下面講解正確方法:

1.1給服務腳本添加注釋。

#vim /etc/init.d/myservice

添加下面兩句到 #!/bin/bash 之後。

# chkconfig: 2345 10 90 
# description: myservice ....

第一行告訴chkconfig缺省啟動的運行級以及啟動和停止的優先級。如果某服務缺
省不在任何運行級啟動,那麼使用 - 代替運行級。第二行對服務進行描述,可以
用\ 跨行注釋。
其中2345是默認啟動級別,級別有0-6共7個級別。等級0表示:表示關機   

等級1表示:單用戶模式   

等級2表示:無網絡連接的多用戶命令行模式   

等級3表示:有網絡連接的多用戶命令行模式   

等級4表示:不可用   

等級5表示:帶圖形界面的多用戶模式   

等級6表示:重新啟動

10是啟動優先級,90是停止優先級,優先級范圍是0-100,數字越大,優先級越低。

1.2  服務腳本必須存放在/etc/ini.d/目錄下;

1.3 chkconfig --add servicename
    在chkconfig工具服務列表中增加此服務,此時服務會被在/etc/rc.d/rcN.d中賦予K/S入口了;
    
1.4 chkconfig --level 2345 servicename on      修改服務的默認啟動等級。
二、 另外還要注意幾個問題:

1)啟動腳本的標准結構:

case "$1" in
    start)
        do start-thing;
        ;;
    stop)
        do stop-thing;
        ;;
    restart)
        do restart-thing;
        ;;
    ...
esac

你如果按這種結構寫個啟動腳本測試一下就會發現,若該腳本的軟連接以S開頭,則系統啟動的時候
執行start-thing代碼段,若該腳本的軟連接以K開頭的話,則系統啟動時執行stop-thing代碼段
(有一點兒例外的是運行級別0,因為0級別是關閉系統,所以/etc/rc0.d/下的以S開頭的軟連接
也執行stop-thing段)。是不是很智能化,所以如果可以的話啟動腳本最好寫標准一些。如果你非
寫成普通的腳本,就幾個命令,沒有上面那個結構,建立以K或S開頭的軟連接會怎麼執行呢?
答案是全部執行。

2)chkconfig
chkconfig命令主要用來更新(啟動或停止)和查詢系統服務的運行級信息。謹記chkconfig不是立即自動禁止或激活一個服務,它只是簡單的改變了符號連接。使用語法:

chkconfig [--add][--del][--list][系統服務] 或 chkconfig[--level <等級代號>][系統服務][on/off/reset]

chkconfig在沒有參數運行時,顯示用法。如果加上服務名,那麼就檢查這個服務是否 在當前運行級啟動。如果是,返回true,否則返回false。如果在服務名後面指定了on,off或者reset,那麼chkconfig 會改變指定服務的啟動信息。on和off分別指服務被啟動和停止,reset指重置服務的啟動信息,無論有問題的初始化腳本指定了什麼。on和off開關,系統默認只對運行級3,4,5有效,但是reset可以對所有運行級有效。

使用范例:

chkconfig --list #列出所有的系統服務

chkconfig --add httpd #增加httpd服務

chkconfig --del httpd #刪除httpd服務

chkconfig --level httpd 2345 on #設置httpd在運行級別為2、3、4、5的情況下都是on(開啟)的狀態

chkconfig --list #列出系統所有的服務啟動情況

chkconfig --list mysqld #列出mysqld服務設置情況

chkconfig --level 35 mysqld on #設定mysqld在等級3和5為開機運行服務,--level35表示操作只在等級3和5執行,on表示啟動,off表示關閉

chkconfig mysqld on #設定mysqld在各等級為on,“各等級”包括2、3、4、5等級

/etc目錄下有一組rc開頭目錄,它們用來存放在各個運行級別下linux自動啟動的服務:

/etc/rc0.d/ #運行模式0下需要啟動的服務

/etc/rc1.d/ #運行模式1下需要啟動的服務

/etc/rc2.d/ #運行模式2下需要啟動的服務

/etc/rc3.d/ #運行模式3下需要啟動的服務

/etc/rc4.d/ #運行模式4下需要啟動的服務

/etc/rc5.d/ #運行模式5下需要啟動的服務

/etc/rc6.d/ #運行模式6下需要啟動的服務

這些目錄中除README說明文檔之外放的都是些軟鏈接(符號鏈接),這些鏈接指向各服務的進程管理腳本,而這些進程管理腳本都放在/etc/init.d目錄中.

用chkconfig命令操作的添加或者刪除開機自動啟動服務程序,其實就是創建或刪除這些目錄中的軟鏈接. 每個軟鏈接的命名都是"大寫S+運行順序+腳本名稱",裡面有一個鏈接是"S20rc.local -> ../init.d/rc.local".打開它指向的腳本/etc/init.d/rc.local看一下,發現它裡面調用了/etc/rc.local這個腳本.原來/etc/rc.local中的命令是在這兒執行的.

如果把mysql服務的啟動命令放進/etc/rc.local中,操作系統也會在執行這個列表的時候執行它,不過它的執行順序是20,比排在前面的S17mysql還要晚一些~

chconfig --level 2345 puppet off 等價於 chkconfig puppet off (不用--level 指定級別時,默認是2345)

這條命令是設置 puppet 服務在 2345級別不自動啟動,當執行這條命令時,會在

rc2.d rc3.d rc4.d rc5.d 這幾個目錄新建軟連接K02puppet 從 /etc/rc.d/init/puppet 腳本

chkconfig puppet on 這個就是在2345級別時,開機自動啟動

當執行這條命令時,會在

rc2.d rc3.d rc4.d rc5.d 這幾個目錄新建軟連接S98puppet 從 /etc/rc.d/init/puppet 腳本

那這個 K02puppet S98puppet 中的 02 和 98 是怎麼來的?

打開/etc/rc.d/init.d/puppet這個腳本文件,看前幾行 如下:

#!/bin/bash

# puppet Init script for running the puppetclient daemon

#

# Author: Duane Griffin

# David Lutterkort

#

# chkconfig: - 98 02

#

# description: Enables periodic systemconfiguration checks through puppet.

# processname: puppet

# config: /etc/sysconfig/puppet

特別是這行

# chkconfig: - 98 02

chkconfig 命令會讀取這一行,來獲取運行級別和那2個數字的,在這個腳本裡面

本文出自 “技術成就夢想” 博客,請務必保留此出處http://pizibaidu.blog.51cto.com/1361909/1795909

Copyright © Linux教程網 All Rights Reserved