Linux學習記錄--服務

服務


常駐在內存中的進程,且提供一些系統功能,就是服務。這個進程稱爲daemon.換另一種說法:服務包括一個提供系統功能的程序以及一個執行該程序的進程shell

每一個服務對應設備的一個端口vim


服務主要分類


按照服務的啓動方式能夠分爲2類:安全

自啓動的服務:大部分爲開機就會啓動的服務。每個服務都有一個進程進行控制bash

統一控制啓動服務:由一個獨立進程負責啓動這些服務,至於什麼時候啓動由用戶進行控制。這個獨立的進程就是xinetd網絡


統一控制啓動服務也是一個自啓動服務,只是其控制的服務不必定開機就啓動dom


幾個重要的目錄

/etc/init.d/*:全部服務啓動腳本存放處(學習shell script語法好去處)socket

/etc/sysconfig/*(各服務的初始化環境配置文件)tcp

/etc/xined.conf統一控制啓動服務整體配置文件ide

/etc/xined.d/*統一控制啓動服務配置文件(每一個服務的配置文件)學習

/etc/*:自啓動服務各自的配置文件

/var/lib/*自啓動服務各自的配置文件

/var/run/*:各個服務的程序的PID記錄處


以自啓動服務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 =>記錄配置信息



自啓動服務的操做

自啓動服務在系統啓動的時候可能會啓動(須要配置),固然咱們也能夠控制它的啓動和中止以及如下其餘操做。


直接執行服務腳本

前面說到全部服務的啓動腳本都存放在/etc/init.d/* ,咱們就以syslog服務爲例


syslog服務對應的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….) 調用這些方法的條件是 執行shell script 後面跟的參數(start|stop|status|restart|condrestart)

經過以上分析,若是咱們要知道一個服務有哪些操做,能夠之間查看這個服務的腳本文件

[root@localhost init.d]# ./syslog status
syslogd (pid  3637) 正在運行...
klogd (pid  3640) 正在運行...
[root@localhost init.d]# ./syslog restart
關閉內核日誌記錄器:                                       [肯定]
關閉系統日誌記錄器:                                       [肯定]
啓動系統日誌記錄器:                                       [肯定]
啓動內核日誌記錄器:                                       [肯定]

經過service指令執行服務


語法:service[服務名稱] 執行操做

    service --status-all


選項與參數:

執行操做:服務須要進行的工做(start|stop|status|restart….)

--status-all:將系統全部自啓動服務顯示


舉例:

[root@localhost ~]# service syslog restart
關閉內核日誌記錄器:                                       [肯定]
關閉系統日誌記錄器:                                       [肯定]
啓動系統日誌記錄器:                                       [肯定]
啓動內核日誌記錄器:                                       [肯定]
[root@localhost ~]# service --status-all
acpid (pid 3901) 正在運行...
anacron 已停
atd (pid 4240) 正在運行...
auditd (pid  3609) 正在運行...
…….


統一控***務的操做


前面提到統一控***務是由一個特殊的進程(xinetd)來控制其餘服務的行爲


總體配置文件

若是針對個體服務配置文件未配置下面項目,那麼服務的設置值將去下面內容做爲默認值

[root@localhost etc]# vim /etc/xinetd.conf
defaults
{
# 服務啓動成功或失敗,以及相關登錄行爲的記錄文件
        log_type        = SYSLOG daemon info  
        log_on_failure  = HOST  
        log_on_success  = PID HOST DURATION EXIT 
# 容許或限制聯機的默認值
        cps         = 50 10  
        instances   = 50    
        per_source  = 10   
# 網絡 (network) 相關的默認值
        v6only         
# 環境參數的配置
        groups         
        umask         
}


服務配置文件分析


舉例:rsync是統一控***務中的一個,下面是這個服務的如下配置

[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
}


配置文件標識說明


= : 表示後面的配置參數就是這樣
+= : 表示後面的配置爲在原來的配置裏頭加入新的參數
-= : 表示後面的配置爲在原來的參數捨棄這裏輸入的參數


如下圖表來自鳥哥私房菜

attribute (功能)

說明與範例

通常配置項目:服務的識別、啓動與程序

disable
(啓動與否)

配置值:[yes|no],默認 disable = yes

,此值可配置該服務是否要啓動若要啓動就得要配置爲[ disable = no ]

id
(服務識別)

配置值:[服務的名稱]

雖然服務在配置文件開頭[ service 服務名稱]已經指定了,不過有時後會有重複的配置值,此時能夠用 id 來取代服務名稱。

server
(程序文件名)

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

這個就是指出這個服務的啓動程序.例如 /usr/bin/rsync 爲啓動 rsync 服務的命令,因此這個配置值就會成爲: [ server = /usr/bin/rsync ]

server_args
(程序參數)

配置值:[程序相關的參數]

這裏應該輸入的就是你的 server 那裏須要輸入的一些參數.例如 rsync 須要加入 --daemon , 因此這裏就配置:[ server_args = --daemon ]。與上面 server 搭配,最終啓動服務的方式[/usr/bin/rsync --daemon]

user
(服務所屬UID)

配置值:[使用者帳號]

若是 xinetd 是以 root 的身份啓動來管理的,那麼這個項目能夠配置爲其餘用戶。此時這個 daemon 將會以此配置值指定的身份來啓動該服務的程序。舉例來講,你啓動 rsync 時會以這個配置值做爲該程序的 UID。

group

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

通常配置項目:聯機方式與聯機封包協議

socket_type
(封包類型)

配置值:[stream|dgram|raw],與封包有關

stream 爲聯機機制較爲可靠的 TCP 封包,若爲 UDP 封包則使用 dgram 機制。raw 表明 server 須要與 IP 直接對談.舉例來講 rsync 使用 TCP ,故配置爲[socket_type = stream ]

protocol
(封包類型)

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

使用的網絡協議,需參考 /etc/protocols 內的通信協議,通常使用 tcp 或 udp。因爲與 socket_type 重複, 所以這個項目能夠不指定。

wait
(聯機機制)

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

這就是咱們剛剛提到的 Multi-threaded 與 single-threaded .通常來講,咱們但願你們的要求均可以同時被激活,因此能夠配置[ wait = no ] 此外,通常 udp 配置爲 yes 而 tcp 配置爲 no。

instances
(最大聯機數)

配置值:[數字或 UNLIMITED]

這個服務可接受的最大聯機數量。若是你只想要開放 30 我的聯機 rsync 時,可在配置文件內加入:[ instances = 30 ]

per_source
(單一用戶來源)

配置值:[一個數字或 UNLIMITED]

若是想要控制每一個來源 IP 僅能有一個最大的同時聯機數,就指定這個項目吧.例如同一個 IP 最多隻能連 10 條聯機[ per_source = 10 ]

cps
(新聯機限制)

配置值:[兩個數字]

爲了不短期內大量的聯機要求致使系統出現忙碌的狀態而有這個 cps 的配置值。第一個數字爲一秒內可以接受的最多新聯機要求, 第二個數字則爲,若超過第一個數字那暫時關閉該服務的秒數。

通常配置項目:登陸文件的記錄

log_type
(登陸檔類型)

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

當數據記錄時,以什麼登陸項目記載?且須要記載的等級爲什麼(默認爲 info 等級)。

log_on_success
log_on_failure
(登陸狀態)

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

在[成功登錄]或[失敗登錄]以後,須要記錄的項目:PID 爲紀錄該 server 啓動時候的 process ID , HOST 爲遠程主機的 IP、USERID 爲登錄者的帳號、EXIT 爲離開的時候記錄的項目、DURATION 爲該用戶使用此服務多久?

進階配置項目:環境、網絡端口口與聯機機制等

env
(額外變量配置)

配置值:[變量名稱=變量內容]

這一個項目可讓你配置環境變量

port
(非正規埠號)

配置值:[一組數字(小於 65534)]

這裏能夠配置不一樣的服務與對應的 port ,可是請記住你的 port 與服務名稱必須與 /etc/services 內記載的相同才行.不過,若服務名稱是你自定義的,那麼這個 port 就能夠隨你指定

redirect
(服務轉址)

配置值:[IP port]

將 client 端對咱們 server 的要求,轉到另外一部主機上去. 例如當有人要使用你的 ftp 時,你能夠將他轉到另外一部機器上面去.那個 IP_Address 就表明另外一部遠程主機的 IP .

includedir
(呼叫外部配置)

配置值:[目錄名稱]

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

安全控管項目:

bind
(服務接口鎖定)

配置值:[IP]

這個是配置[容許使用此一服務的適配卡]的意思.舉個例子來講,你的 Linux 主機上面有兩個 IP ,而你只想要讓 IP1 可使用此一服務,但 IP2 不能使用此服務,這裏就能夠將 IP1 寫入便可.那麼 IP2 就不可使用此一 server

interface

配置值:[IP]

與 bind 相同

only_from
(防火牆機制)

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

這東西用在安全機制上面,也就是管制[只有這裏面規定的 IP 或者是主機名能夠登錄.]

no_access
(防火牆機制)

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

跟 only_from 差很少.就是用來管理能否進入你的 Linux 主機激活你的 server 服務的管理項目. no_access 表示[不可登錄]的 PC 囉.

access_times
(時間控管)

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

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

umask

配置值:[000, 777, 022]

能夠配置用戶建立目錄或者是文件時候的屬性.系統建議值是 022 。


經過統一控***務啓動一個服務


1.       將服務設置爲啓動

[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.       從新啓動統一控***務進程,以重啓咱們剛纔更改的這個服務

[root@localhost etc]# service xinetd restart
中止 xinetd:                                              [肯定]
啓動 xinetd:                                              [肯定]


3.       查看端口判斷服務是否啓用成功

[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    

說明:全部服務端口在/etc/services能夠查看到


設置服務開機啓動


前面說到部分自啓動服務會開機啓動,經過xinetd進程控制的統一控***務也能夠經過更改服務配置文件中disable=no,也能夠控制其啓動,

那麼經過什麼配置讓咱們能夠選擇哪些服務開機就啓動,哪些服務開機時不啓動


語法:chkconfig--list

    chkconfig [--level [0123456]] 服務名稱 [on|off]


參數與選項:

--list:查看全部服務開機啓動狀況

--level:啓動級別(就是init後面那個數字,3爲命令行模式,5爲圖形界面模式)


舉例1:查看全部服務開機啓動狀況

[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:關閉  1:關閉  2:關閉  3:關閉  4:關閉  5:關閉  6:關閉
acpid           0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉
anacron         0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉

基於 xinetd 的服務:
        chargen-dgram:  關閉
        chargen-stream: 關閉
        daytime-dgram:  關閉
tftp:           啓用
=>能夠看出xinetd進程控制的服務經過更改disable=no 也是能夠設置開機啓動的


舉例2:設置服務開機啓動

[root@localhost xinetd.d]# chkconfig --level 345 NetworkManager on
[root@localhost xinetd.d]# chkconfig --list
NetworkManager  0:關閉  1:關閉  2:關閉  3:啓用  4:啓用  5:啓用  6:關閉


總結:1.對於自啓動的服務來講,經過chkconfig[--level [0123456]]可設置是否開機啓動

            2.對於統一控制的服務,能夠經過更改服務配置文件disable=no來設置開啓啓動


如何製做本身的服務



語法:chkconfig[--add|--del] 服務名稱

選項與參數:

--add:添加一個服務到服務管理器

--del:刪除一個服務從服務管理器


步驟1:建立一個程序,提供某種功能

說明:此程序執行文件必須在/etc/init.d/目錄下


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

echo "這是個人script. 參數是 $1"
=> chkconfig: 35 80 70其中,35指的是啓動級別,80指的是啓動順序,70指的是結束順序(由於服務啓動與結束是有依賴關係的所以須要設置啓動結束順序)
=> description 添加服務描述信息

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

步驟2:添加服務到服務管理器

[root@localhost init.d]# chkconfig --add myscript 
[root@localhost init.d]# chkconfig --list myscript 
myscript        0:關閉  1:關閉  2:關閉  3:啓用  4:關閉  5:啓用  6:關閉


開機顯示效果

Center

相關文章
相關標籤/搜索