鍍金池/ 教程/ Linux/ 服務(wù)
Linux 學(xué)習(xí)記錄--開機掛載錯誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡介
Linux 學(xué)習(xí)記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學(xué)習(xí)記錄--文件權(quán)限
Linux 命令縮寫
命令與文件的查詢
文件|目錄的默認(rèn)權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學(xué)習(xí)記錄--程序編譯與函數(shù)庫
正則表達(dá)式與其應(yīng)用
關(guān)機相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進程控制
文件系統(tǒng)簡單操作
磁盤掛載與卸載
有名管道通訊
磁盤分區(qū),格式化與檢驗
工作管理與進程管理
匿名管道通訊
Linux 學(xué)習(xí)記錄--啟動流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學(xué)習(xí)記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

服務(wù)

常駐在內(nèi)存中的進程,且提供一些系統(tǒng)功能,就是服務(wù)。這個進程稱為 daemon.換另外一種說法:服務(wù)包括一個提供系統(tǒng)功能的程序以及一個執(zhí)行該程序的進程
每個服務(wù)對應(yīng)設(shè)備的一個端口

服務(wù)主要分類

按照服務(wù)的啟動方式可以分為2類:
自啟動的服務(wù):大部分為開機就會啟動的服務(wù)。每一個服務(wù)都有一個進程進行控制
統(tǒng)一控制啟動服務(wù):由一個獨立進程負(fù)責(zé)啟動這些服務(wù),至于何時啟動由用戶進行控制。這個獨立的進程就是 xinetd

統(tǒng)一控制啟動服務(wù)也是一個自啟動服務(wù),只是其控制的服務(wù)不一定開機就啟動

幾個重要的目錄

/etc/init.d/:所有服務(wù)啟動腳本存放處(學(xué)習(xí) shell script 語法好去處)
/etc/sysconfig/
(各服務(wù)的初始化環(huán)境配置文件)
/etc/xined.conf統(tǒng)一控制啟動服務(wù)總體配置文件
/etc/xined.d/ 統(tǒng)一控制啟動服務(wù)配置文件(每個服務(wù)的配置文件)
/etc/
:自啟動服務(wù)各自的配置文件
/var/lib/自啟動服務(wù)各自的配置文件
/var/run/
:各個服務(wù)的程序的 PID 記錄處

以自啟動服務(wù) syslogd 為例
[root@localhost~]# ll /etc/sysconfig/syslog /etc/init.d/syslog /etc/syslog.conf
-rwxr-xr-x1 root root 2043 2010-04-03 /etc/init.d/syslog =>記錄程序文件
-rw-r--r--1 root root610 2010-04-03/etc/sysconfig/syslog =>記錄初始化信息
-rw-r--r--1 root root938 02-14 10:10/etc/syslog.conf =>記錄配置信息

自啟動服務(wù)的操作

自啟動服務(wù)在系統(tǒng)啟動的時候可能會啟動(需要配置),當(dāng)然我們也可以控制它的啟動和停止以及以下其他操作。

直接執(zhí)行服務(wù)腳本

前面說到所有服務(wù)的啟動腳本都存放在/etc/init.d/* ,我們就以 syslog 服務(wù)為例

syslog 服務(wù)對應(yīng)的 shellscript

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        rhstatus
        ;;
  restart)
        restart
        ;;
  reload)
        reload
        ;;
  condrestart)
        [ -f /var/lock/subsys/syslog ] && restart || :
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart}"
        exit 2
esac

通過以上可以粗略的看到這里包含6個方法(start,stop,rhstatus….) 調(diào)用這些方法的條件是 執(zhí)行 shell script 后面跟的參數(shù)(start|stop|status|restart|condrestart)
通過以上分析,如果我們要知道一個服務(wù)有哪些操作,可以之間查看這個服務(wù)的腳本文件

[root@localhost init.d]# ./syslog status
syslogd (pid  3637) 正在運行...
klogd (pid  3640) 正在運行...
[root@localhost init.d]# ./syslog restart
關(guān)閉內(nèi)核日志記錄器:                                       [確定]
關(guān)閉系統(tǒng)日志記錄器:                                       [確定]
啟動系統(tǒng)日志記錄器:                                       [確定]
啟動內(nèi)核日志記錄器:                                       [確定]

通過 service 指令執(zhí)行服務(wù)

語法:service[服務(wù)名稱] 執(zhí)行操作
service --status-all

選項與參數(shù):
執(zhí)行操作:服務(wù)需要進行的工作(start|stop|status|restart….)
--status-all:將系統(tǒng)所有自啟動服務(wù)顯示

舉例:

[root@localhost ~]# service syslog restart
關(guān)閉內(nèi)核日志記錄器:                                       [確定]
關(guān)閉系統(tǒng)日志記錄器:                                       [確定]
啟動系統(tǒng)日志記錄器:                                       [確定]
啟動內(nèi)核日志記錄器:                                       [確定]
[root@localhost ~]# service --status-all
acpid (pid 3901) 正在運行...
anacron 已停
atd (pid 4240) 正在運行...
auditd (pid  3609) 正在運行...
…….

統(tǒng)一控***務(wù)的操作

前面提到統(tǒng)一控***務(wù)是由一個特殊的進程(xinetd)來控制其他服務(wù)的行為

整體配置文件

如果針對個體服務(wù)配置文件未配置下面項目,那么服務(wù)的設(shè)置值將去下面內(nèi)容作為默認(rèn)值

[root@localhost etc]# vim /etc/xinetd.conf
defaults
{
# 服務(wù)啟動成功或失敗,以及相關(guān)登陸行為的記錄文件
        log_type        = SYSLOG daemon info  
        log_on_failure  = HOST  
        log_on_success  = PID HOST DURATION EXIT 
# 允許或限制聯(lián)機的默認(rèn)值
        cps         = 50 10  
        instances   = 50    
        per_source  = 10   
# 網(wǎng)絡(luò) (network) 相關(guān)的默認(rèn)值
        v6only         
# 環(huán)境參數(shù)的配置
        groups         
        umask         
}

服務(wù)配置文件分析

**舉例:rsync 是統(tǒng)一控*務(wù)中的一個,下面是這個服務(wù)的以下配置

[root@localhost etc]# vim /etc/xinetd.d/rsync
# default: off
# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = yes
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

配置文件標(biāo)識說明

= : 表示后面的配置參數(shù)就是這樣
+= : 表示后面的配置為在原來的配置里頭加入新的參數(shù)
-= : 表示后面的配置為在原來的參數(shù)舍棄這里輸入的參數(shù)

以下圖表來自鳥哥私房菜

attribute (功能)

說明與范例

一般配置項目:服務(wù)的識別、啟動與程序

disable
(啟動與否)

配置值:[yes|no],默認(rèn) disable = yes

,此值可配置該服務(wù)是否要啟動若要啟動就得要配置為[ disable = no ]

id
(服務(wù)識別)

配置值:[服務(wù)的名稱]

雖然服務(wù)在配置文件開頭[ service 服務(wù)名稱]已經(jīng)指定了,不過有時后會有重復(fù)的配置值,此時可以用 id 來取代服務(wù)名稱。

server
(程序文件名)

配置值:[程序的絕對路徑名]

這個就是指出這個服務(wù)的啟動程序.例如 /usr/bin/rsync 為啟動 rsync 服務(wù)的命令,所以這個配置值就會成為: [ server = /usr/bin/rsync ]

server_args
(程序參數(shù))

配置值:[程序相關(guān)的參數(shù)]

這里應(yīng)該輸入的就是你的 server 那里需要輸入的一些參數(shù).例如 rsync 需要加入 --daemon , 所以這里就配置:[ server_args = --daemon ]。與上面 server 搭配,最終啟動服務(wù)的方式[/usr/bin/rsync --daemon]

user
(服務(wù)所屬UID)

配置值:[使用者賬號]

如果 xinetd 是以 root 的身份啟動來管理的,那么這個項目可以配置為其他用戶。此時這個 daemon 將會以此配置值指定的身份來啟動該服務(wù)的程序。舉例來說,你啟動 rsync 時會以這個配置值作為該程序的 UID。

group

跟 user 的意思相同.此項目填入組名即可。

一般配置項目:聯(lián)機方式與聯(lián)機封包協(xié)議

socket_type
(封包類型)

配置值:[stream|dgram|raw],與封包有關(guān)

stream 為聯(lián)機機制較為可靠的 TCP 封包,若為 UDP 封包則使用 dgram 機制。raw 代表 server 需要與 IP 直接對談.舉例來說 rsync 使用 TCP ,故配置為[socket_type = stream ]

protocol
(封包類型)

配置值:[tcp|udp],通常使用 socket_type 取代此配置

使用的網(wǎng)絡(luò)協(xié)議,需參考 /etc/protocols 內(nèi)的通訊協(xié)議,一般使用 tcp 或 udp。由于與 socket_type 重復(fù), 因此這個項目可以不指定。

wait
(聯(lián)機機制)

配置值:[yes(single)|no(multi)],默認(rèn) wait = no

這就是我們剛剛提到的 Multi-threaded 與 single-threaded .一般來說,我們希望大家的要求都可以同時被激活,所以可以配置[ wait = no ] 此外,一般 udp 配置為 yes 而 tcp 配置為 no。

instances
(最大聯(lián)機數(shù))

配置值:[數(shù)字或 UNLIMITED]

這個服務(wù)可接受的最大聯(lián)機數(shù)量。如果你只想要開放 30 個人聯(lián)機 rsync 時,可在配置文件內(nèi)加入:[ instances = 30 ]

per_source
(單一用戶來源)

配置值:[一個數(shù)字或 UNLIMITED]

如果想要控制每個來源 IP 僅能有一個最大的同時聯(lián)機數(shù),就指定這個項目吧.例如同一個 IP 最多只能連 10 條聯(lián)機[ per_source = 10 ]

cps
(新聯(lián)機限制)

配置值:[兩個數(shù)字]

為了避免短時間內(nèi)大量的聯(lián)機要求導(dǎo)致系統(tǒng)出現(xiàn)忙碌的狀態(tài)而有這個 cps 的配置值。第一個數(shù)字為一秒內(nèi)能夠接受的最多新聯(lián)機要求, 第二個數(shù)字則為,若超過第一個數(shù)字那暫時關(guān)閉該服務(wù)的秒數(shù)。

一般配置項目:登錄文件的記錄

log_type
(登錄檔類型)

配置值:[登錄項目 等級]

當(dāng)數(shù)據(jù)記錄時,以什么登錄項目記載?且需要記載的等級為何(默認(rèn)為 info 等級)。

log_on_success
log_on_failure
(登錄狀態(tài))

配置值:[PID,HOST,USERID,EXIT,DURATION]

在[成功登陸]或[失敗登陸]之后,需要記錄的項目:PID 為紀(jì)錄該 server 啟動時候的 process ID , HOST 為遠(yuǎn)程主機的 IP、USERID 為登陸者的賬號、EXIT 為離開的時候記錄的項目、DURATION 為該用戶使用此服務(wù)多久?

進階配置項目:環(huán)境、網(wǎng)絡(luò)端口口與聯(lián)機機制等

env
(額外變量配置)

配置值:[變量名稱=變量內(nèi)容]

這一個項目可以讓你配置環(huán)境變量

port
(非正規(guī)埠號)

配置值:[一組數(shù)字(小于 65534)]

這里可以配置不同的服務(wù)與對應(yīng)的 port ,但是請記住你的 port 與服務(wù)名稱必須與 /etc/services 內(nèi)記載的相同才行.不過,若服務(wù)名稱是你自定義的,那么這個 port 就可以隨你指定

redirect
(服務(wù)轉(zhuǎn)址)

配置值:[IP port]

將 client 端對我們 server 的要求,轉(zhuǎn)到另一部主機上去. 例如當(dāng)有人要使用你的 ftp 時,你可以將他轉(zhuǎn)到另一部機器上面去.那個 IP_Address 就代表另一部遠(yuǎn)程主機的 IP .

includedir
(呼叫外部配置)

配置值:[目錄名稱]

表示將某個目錄底下的所有文件都給他塞進來

安全控管項目:

bind
(服務(wù)接口鎖定)

配置值:[IP]

這個是配置[允許使用此一服務(wù)的適配卡]的意思.舉個例子來說,你的 Linux 主機上面有兩個 IP ,而你只想要讓 IP1 可以使用此一服務(wù),但 IP2 不能使用此服務(wù),這里就可以將 IP1 寫入即可.那么 IP2 就不可以使用此一 server

interface

配置值:[IP]

與 bind 相同

only_from
(防火墻機制)

配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

這東西用在安全機制上面,也就是管制[只有這里面規(guī)定的 IP 或者是主機名可以登陸.]

no_access
(防火墻機制)

配置值:[0.0.0.0, 192.168.1.0/24, hostname, domainname]

跟 only_from 差不多.就是用來管理可否進入你的 Linux 主機激活你的 server 服務(wù)的管理項目. no_access 表示[不可登陸]的 PC 啰.

access_times
(時間控管)

配置值:[00:00-12:00, HH:MM-HH:MM]

這個項目在配置[該服務(wù) server 啟動的時間],使用的是 24 小時的配置.例如你的 ftp 要在 8 點到 16 點開放的話,就是: 08:00-16:00。

umask

配置值:[000, 777, 022]

可以配置用戶創(chuàng)建目錄或者是文件時候的屬性.系統(tǒng)建議值是 022 。

通過統(tǒng)一控***務(wù)啟動一個服務(wù)

1. 將服務(wù)設(shè)置為啟動

[root@localhost xinetd.d]# cat /etc/xinetd.d/rsync|sed 's/yes/no/g' >/etc/xinetd.d/tmp
[root@localhost xinetd.d]# vim tmp
[root@localhost xinetd.d]# cat ./tmp >./rsync 
[root@localhost xinetd.d]# cat ./rsync # default: off

# description: The rsync server is a good addition to an ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable         = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}

**2. 重新啟動統(tǒng)一控*務(wù)進程,以重啟我們剛才更改的這個服務(wù)

[root@localhost etc]# service xinetd restart
停止 xinetd:                                              [確定]
啟動 xinetd:                                              [確定]

3. 查看端口判斷服務(wù)是否啟用成功

[root@localhost xinetd.d]# cat /etc/services |grep 'rsync'
rsync           873/tcp                         # rsync
rsync           873/udp                         # rsync
root@localhost xinetd.d]# netstat -tnlp|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10301/xinetd  

說明:所有服務(wù)端口在/etc/services 可以查看到

設(shè)置服務(wù)開機啟動

前面說到部分自啟動服務(wù)會開機啟動,通過 xinetd 進程控制的統(tǒng)一控***務(wù)也可以通過更改服務(wù)配置文件中disable=no,也可以控制其啟動,
那么通過什么配置讓我們可以選擇哪些服務(wù)開機就啟動,哪些服務(wù)開機時不啟動

語法:chkconfig--list
chkconfig [--level [0123456]] 服務(wù)名稱 [on|off]

參數(shù)與選項:
--list:查看所有服務(wù)開機啟動情況
--level:啟動級別(就是 init 后面那個數(shù)字,3為命令行模式,5為圖形界面模式)

舉例1:查看所有服務(wù)開機啟動情況

[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:關(guān)閉  1:關(guān)閉  2:關(guān)閉  3:關(guān)閉  4:關(guān)閉  5:關(guān)閉  6:關(guān)閉
acpid           0:關(guān)閉  1:關(guān)閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關(guān)閉
anacron         0:關(guān)閉  1:關(guān)閉  2:啟用  3:啟用  4:啟用  5:啟用  6:關(guān)閉

基于 xinetd 的服務(wù):
        chargen-dgram:  關(guān)閉
        chargen-stream: 關(guān)閉
        daytime-dgram:  關(guān)閉
tftp:           啟用
=>可以看出 xinetd 進程控制的服務(wù)通過更改 disable=no 也是可以設(shè)置開機啟動的

舉例2:設(shè)置服務(wù)開機啟動

[root@localhost xinetd.d]# chkconfig --level 345 NetworkManager on
[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:關(guān)閉  1:關(guān)閉  2:關(guān)閉  3:啟用  4:啟用  5:啟用  6:關(guān)閉

總結(jié):1.對于自啟動的服務(wù)來說,通過 chkconfig[--level [0123456]]可設(shè)置是否開機啟動
2.對于統(tǒng)一控制的服務(wù),可以通過更改服務(wù)配置文件 disable=no 來設(shè)置開啟啟動

如何制作自己的服務(wù)

語法:chkconfig[--add|--del] 服務(wù)名稱
選項與參數(shù):
--add:添加一個服務(wù)到服務(wù)管理器
--del:刪除一個服務(wù)從服務(wù)管理器

步驟1:創(chuàng)建一個程序,提供某種功能
說明:此程序執(zhí)行文件必須在/etc/init.d/目錄下

#!/bin/bash
# chkconfig: 35 80 70
# description:hello

echo "這是我的 script. 參數(shù)是 $1"
=> chkconfig: 35 80 70其中,35指的是啟動級別,80指的是啟動順序,70指的是結(jié)束順序(因為服務(wù)啟動與結(jié)束是有依賴關(guān)系的因此需要設(shè)置啟動結(jié)束順序)
=> description 添加服務(wù)描述信息

[root@localhost init.d]# ll myscript 
-rwxrwxrwx 1 root root 97 03-20 16:08 myscript

步驟2:添加服務(wù)到服務(wù)管理器

[root@localhost init.d]# chkconfig --add myscript 
[root@localhost init.d]# chkconfig --list myscript 
myscript        0:關(guān)閉  1:關(guān)閉  2:關(guān)閉  3:啟用  4:關(guān)閉  5:啟用  6:關(guān)閉

開機顯示效果

http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/1.png" alt="" />