本文目錄: 11.1 服務的概念 11.2 管理獨立守護進程 11.3 管理服務的開機自啟動 11.4 管理xinetd及相關瞬時守護進程 11.5 CentOS 7上管理服務 CentOS 7和CentOS 6管理服務的方式完全不同。本文先說明CentOS 6上的管理方式,在最後列出CentOS ...
本文目錄:
CentOS 7和CentOS 6管理服務的方式完全不同。本文先說明CentOS 6上的管理方式,在最後列出CentOS 7上服務管理方式。
11.1 服務的概念
服務是向外提供服務的進程,一般來說都會放在後臺,既然要持續不斷的提供外界隨時發來的服務請求,服務進程就需要常駐在記憶體中,且不應該和終端有關,否則終端退出服務程式就退出了。另外,要能夠接待外界的請求為外界提供服務,那麼就需要有個專屬於這個服務的"服務視窗",這個服務視窗就是埠號,通過埠號就能找到服務的提供者。
提供服務的一端叫做服務端,向服務端請求服務的叫做客戶端。首先,服務端啟動服務進程,此時將開放對應的埠號;然後客戶端指定服務端IP地址和埠號向該服務端發起請求,服務端所在主機的內核接收到請求數據包,然後分析數據包發現請求的是某某埠號,內核知道該埠號是哪個應用程式監聽的埠,所以將請求報文發送給對應的應用程式,應用程式收到報文後,將和客戶端建立連接,併進行數據傳輸。
另外需要註意的是,並非所有服務都總是提供埠號的,例如xinetd這個服務,只有在需要的時候才接管相應的埠,如rsync監聽埠為222時,那麼請求rsync時,xinetd在監聽過程中的埠號就是222。在不被請求的時候,xinetd是沒有埠號的。
在Linux中,服務分為獨立守護進程和超級守護進程。獨立守護進程是自行監聽在後臺的,基本上所有的服務都是獨立守護進程類的服務。超級守護進程專指xinetd這個服務,這個服務代為管理著一些特殊的服務,這類服務在被請求的時候才會由xinetd通知它啟動服務,服務提供完畢後就關閉服務,這類服務稱為瞬時守護進程,即只存在於瞬時。
但要明白,超級守護進程xinetd本身是一個常駐記憶體的獨立守護進程,因為它要監聽來自外界對其管理的瞬時守護進程的請求。只不過一般不工作的時候,xinetd不占用埠號,在工作的時候它占用被請求的瞬時守護進程的埠號,並處於監聽狀態。
11.2 管理獨立守護進程
在CentOS 6上,所有的服務腳本都在/etc/rc.d/init.d/目錄下,/etc/init.d/是它的軟鏈接。在此目錄下的腳本都是LSB風格的腳本,它們基本上都能接受start/stop/restart/reload/status等參數。
[root@xuexi tmp]# ls /etc/init.d abrt-ccpp cpuspeed irqbalance messagebus psacct saslauthd abrtd crond kdump netconsole quota_nld single abrt-oops functions killall netfs rdisc smartd acpid haldaemon lvm2-lvmetad network restorecond sshd atd halt lvm2-monitor ntpd rngd svnserve auditd ip6tables mcelogd ntpdate rsyslog sysstat blk-availability iptables mdmonitor postfix sandbox udev-post
要管理獨立守護進程類的服務
/etc/init.d/service_name restart|start|stop|status # 方法一
service service_name restart|start|stop|status # 方法二
要讓服務能夠被service命令管理,將其服務腳本放在/etc/init.d目錄下即可。
11.3 管理服務的開機自啟動
chkconfig命令能管理/etc/init.d/目錄下存在且腳本的內容滿足一定條件的服務。
要能讓chkconfig管理服務的開機是否自啟動行為,只需將腳本放在/etc/init.d目錄下,然後在腳本的前部加上chkconfig行和description行。如:
#!/bin/bash # chkconfig: - 85 15 # description: The Apache HTTP Server is an efficient and extensible
這兩行必須在所有非註釋行的前面,且這兩行必須得被"註釋"。其中chkconfig行"-"表示適用於運行級別123456上,85表示開機啟動時,它的啟動順序為85,15表示關機停止服務時,它的停止順序為15。description行隨便給一點描述信息就可以,但是必須得給"description:"關鍵字。
然後,就可以有chkconfig來管理服務的開機自啟動了。
chkconfig [--add | --del] <name> # 將/etc/init.d中可以被chkconfig管理的服務添加到chkconfig的管理列表中,或者從列表中刪除 chkconfig [--list] [name] # 列出指定名稱的服務的開啟自啟動信息。name可以使用all來表示列出所有chkconfig管理列表中的服務 chkconfig [--level <levels>] <name> <on|off|reset> # 將指定名稱的服務在指定級別上打開開機自啟動或關閉開機自啟動功能。 # reset則表示重置為腳本中指定的級別
當然,除了chkconfig可以管理開機自啟動,將啟動命令放在/etc/rc.d/rc.local文件中也是可以的。
11.4 管理xinetd及相關瞬時守護進程
11.4.1 管理瞬時守護進程
該類服務不能直接使用service命令來啟動。只能去/etc/xinetd.d/目錄下的對應文件中進行設置(當然,也可以在/etc/xinetd.conf中配置),然後由xinetd進行管理。
首先安裝xinetd程式。
[root@xuexi tmp]# yum -y install xinetd [root@xuexi tmp]# chkconfig --list ......省略 xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off xinetd based services: chargen-dgram: off chargen-stream: off daytime-dgram: off daytime-stream: off discard-dgram: off discard-stream: off echo-dgram: off echo-stream: off rsync: off tcpmux-server: off time-dgram: off time-stream: off
首先得保證xinetd是已經工作在後臺的。
service xinetd start
然後管理瞬時守護進程,該類服務比較特別,其自啟動狀態和服務運行狀態是同步的,也就是說chkconfig設置了其自啟動則表示啟動該服務,否則為停止該服務。另外,對其指定級別是無效的,它們的啟動級別繼承與xinetd的啟動級別,並且xinetd會接管其觸發的瞬時守護進程的埠號。
例如啟動rsync這個瞬時守護進程。
chkconfig rsync on
11.4.2 瞬時守護進程的配置
瞬時守護進程受兩個配置文件控制,一個是xinetd的配置文件/etc/xinetd.conf提供預設配置,一個是/etc/xinetd.d/下的配置文件針對對應的服務提供配置。
例如配置rsync,以下是/etc/xinetd.d/rsync的預設配置。
[root@xuexi tmp]# vi /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 # 定義rsync服務,名稱要和/etc/xinetd.d/下的文件同名 { disable = yes # yes表示不啟動,no表示啟動,等價於chkconfig rsync {on|off},所以這裡設置後將直接在chkconfig中生效 flags = IPv6 # 不用管 socket_type = stream # 這代表的是tcp類型的套接字 wait = no # 該服務是單線程還是多線程的,表現形式是超出的請求是否進行等待,no表示多線程 user = root # 以什麼身份運行rsync server = /usr/bin/rsync # 服務程式 server_args = --daemon # 服務程式啟動時傳遞的參數 log_on_failure += USERID # 連接失敗的日誌記錄,+表示在全局對應的條目上新增此處指定的USERID }
除此之外,還有幾個選項:
【訪問控制選項】以下兩個控制列表中最好不要出現衝突的地址。 only_from:定義允許連接的訪問控制列表,支持單IP,CIDR格式和長mask格式的網段,主機名hostname,域DOMAIN(.abc.com) no_access:定義不允許訪問的列表,語法格式同only_from 【監聽地址】 bind = ip_addr interface = ip_addr # 等價於bind 【資源控制】 cps=args1 args2 instances=N per_source=N
這3個選項的意義如下圖。
11.5 CentOS 7上管理服務
service name start ==> systemctl start name.service
service name stop ==> systemctl stop name.service
service name restart ==> systemctl restart name.service
service name status ==> systemctl status name.service
查看服務是否激活(在運行中):systemctl is-active name.service
查看所有已經激活 :systemctl list-units --type service
查看所有服務 :systemctl list-units --type service --all
設置開機自啟動:chkconfig name on ==> systemctl enable name.service
禁止開機自啟動:chkconfig name off ==> systemctl disable name.service
查看服務是否開機自啟動:chkconfig --list name ==> is-enabled name.service
查看所有服務的開機自啟動狀態:chkconfig --list ==> systemctl list-unit-files --type service
回到系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html