常駐在內(nèi)存中的進程,且提供一些系統(tǒng)功能,就是服務(wù)。這個進程稱為 daemon.換另外一種說法:服務(wù)包括一個提供系統(tǒng)功能的程序以及一個執(zhí)行該程序的進程
每個服務(wù)對應(yīng)設(shè)備的一個端口
按照服務(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ù)在系統(tǒng)啟動的時候可能會啟動(需要配置),當(dāng)然我們也可以控制它的啟動和停止以及以下其他操作。
前面說到所有服務(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[服務(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ù)是由一個特殊的進程(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
}
**舉例: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
}
= : 表示后面的配置參數(shù)就是這樣
+= : 表示后面的配置為在原來的配置里頭加入新的參數(shù)
-= : 表示后面的配置為在原來的參數(shù)舍棄這里輸入的參數(shù)
以下圖表來自鳥哥私房菜
attribute (功能) |
說明與范例 |
一般配置項目:服務(wù)的識別、啟動與程序 | |
disable |
配置值:[yes|no],默認(rèn) disable = yes ,此值可配置該服務(wù)是否要啟動若要啟動就得要配置為[ disable = no ] |
id |
配置值:[服務(wù)的名稱] 雖然服務(wù)在配置文件開頭[ service 服務(wù)名稱]已經(jīng)指定了,不過有時后會有重復(fù)的配置值,此時可以用 id 來取代服務(wù)名稱。 |
server |
配置值:[程序的絕對路徑名] 這個就是指出這個服務(wù)的啟動程序.例如 /usr/bin/rsync 為啟動 rsync 服務(wù)的命令,所以這個配置值就會成為: [ server = /usr/bin/rsync ] |
server_args |
配置值:[程序相關(guān)的參數(shù)] 這里應(yīng)該輸入的就是你的 server 那里需要輸入的一些參數(shù).例如 rsync 需要加入 --daemon , 所以這里就配置:[ server_args = --daemon ]。與上面 server 搭配,最終啟動服務(wù)的方式[/usr/bin/rsync --daemon] |
user |
配置值:[使用者賬號] 如果 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 |
配置值:[yes(single)|no(multi)],默認(rèn) wait = no 這就是我們剛剛提到的 Multi-threaded 與 single-threaded .一般來說,我們希望大家的要求都可以同時被激活,所以可以配置[ wait = no ] 此外,一般 udp 配置為 yes 而 tcp 配置為 no。 |
instances |
配置值:[數(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 |
配置值:[兩個數(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 |
配置值:[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 |
配置值:[一組數(shù)字(小于 65534)] 這里可以配置不同的服務(wù)與對應(yīng)的 port ,但是請記住你的 port 與服務(wù)名稱必須與 /etc/services 內(nèi)記載的相同才行.不過,若服務(wù)名稱是你自定義的,那么這個 port 就可以隨你指定 |
redirect |
配置值:[IP port] 將 client 端對我們 server 的要求,轉(zhuǎn)到另一部主機上去. 例如當(dāng)有人要使用你的 ftp 時,你可以將他轉(zhuǎn)到另一部機器上面去.那個 IP_Address 就代表另一部遠(yuǎn)程主機的 IP . |
includedir |
配置值:[目錄名稱] 表示將某個目錄底下的所有文件都給他塞進來 |
安全控管項目: | |
bind |
配置值:[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 。 |
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 可以查看到
前面說到部分自啟動服務(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è)置開啟啟動
語法: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="" />