常駐在內存中的進程,且提供一些系統功能,就是服務。這個進程稱爲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 --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 |
配置值:[使用者帳號] 若是 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 |
配置值:[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:關閉
開機顯示效果