Solaris10 服務管理

    Solaris 10引入全新的後臺服務管理機制,該機制被稱爲SMF,它包含了新的概念、管理工具和服務定義方式。好比用里程碑(milestone)代替了運行級別的概念;用服務配置庫代替分散在/etc/rcx.d目錄的服務啓動腳本。

SMF相對於傳統的Unix後臺服務管理機制具有如下突出的功能:
1. 恢復由軟件故障、硬件故障、管理錯誤終止的服務
2. 服務之間能夠定義依賴關係
3. 服務能夠有多個實例
3. 提供了比較全面基於命令行管理工具
4. 根據依賴關係能夠併發啓動服務,加快系統啓動的速度
5. 引入服務配置庫,提供服務配置庫快照、備份、恢復功能
這些功能方便了服務的管理,服務的可用性。SMF提供了必定程度的服務自愈性,它也是Solaris 10系統可預測自愈功能(Predictive Self-Healing)的一部分。

SMF組成要素
SMF包含兩個進程、服務定義的manifest和profile、服務配置庫和命令行管理工具等內容:
1. svc.startd, svc.configd
2. manifest, profile
3. repository(sqlite db)
4. CLI mgmt tool (svccfg, svcadm, svcprop, svcs, inetadm, inetconv, repoistory_restore)

svc.startd
是SMF的主要進程,它根據系統管理員指令或者系統故障或應用故障來啓動、中止、重啓服務。
svc.configd是負責管理服務配置庫的進程。SMF命令行工具svccfg, svcprop, svcs, svcadm經過該進程訪問服務配置庫。
服務和服務的實例能夠用xml文件定義,manifest定義服務,profile定義服務實例,這些xml文件一般存放在/var/svc目錄下。
服務配置庫存放在/etc/svc/repository.db文件中。服務配置庫其實是一個sqlite的關係數據庫,它存放了服務的定義、配置等信息。
/var/svc目錄下的manifest和profile文件和/etc/svc/repository.db文件都包含了服務的定義、配置等信息,後者的信息是權威的。
使用svccfg import命令可將SMF服務的manifest xml文件導入到repository中;
使用svccfg export命令可將repository中SMF服務的manifest信息導出到xml文件;
使用svccfg apply命令可將SMF服務的profile xml文件導入到repository中;
使用svccfg etract命令可將repository中SMF服務的profile信息導出到xml文件。

SMF中的服務
服務和服務實例
SMF中的服務能夠有多個實例,服務實例繼承服務的屬性。
SMF中的服務命名
SMF中的服務命名方式和傳統的Unix中的後臺進程的命名方式有很大的差異,SMF服務名稱是用FMRI(Fault Managed Resouce Identifier)表示的,FMRI是基於URI規範資源命名方式在Solaris系統的一個應用。對於SMF服務,其格式是: 
scheme:/category1/category2.../categoryn/service[:instance]
scheme
有svc和lrc,lrc沒有實例名。
svc模式的FMRI表示SMF服務,而lrc模式的FMRI表示舊的基於rc腳本的服務。
用svcs -a能夠列出當前全部的服務:
STATE          STIME    FMRI
legacy_run      1:58:26 lrc:/etc/rcS_d/S50sk98sol
legacy_run      1:58:50 lrc:/etc/rc3_d/S50apache
legacy_run      1:58:51 lrc:/etc/rc3_d/S75seaport
legacy_run      1:58:55 lrc:/etc/rc3_d/S76snmpdx
legacy_run      1:58:57 lrc:/etc/rc3_d/S90samba
...
disabled        1:58:06 svc:/network/iscsi_initiator:default
disabled        1:58:06 svc:/system/metainit:default
disabled        1:58:07 svc:/network/ipfilter:default
disabled        1:58:08 svc:/network/rpc/keyserv:default
disabled        1:58:08 svc:/network/rpc/nisplus:default
disabled        1:58:08 svc:/network/nis/client:default
disabled        1:58:08 svc:/network/dns/client:default
disabled        1:58:08 svc:/network/ldap/client:default
disabled        1:58:09 svc:/network/nfs/cbd:default
disabled        1:58:09 svc:/network/nfs/mapid:default
...
online          1:58:06 svc:/system/svc/restarter:default
online          1:58:08 svc:/network/pfil:default
online          1:58:10 svc:/network/loopback:default
online          1:58:11 svc:/milestone/name-services:default
online          1:58:12 svc:/system/filesystem/root:default
online          1:58:14 svc:/system/boot-archive:default
online          1:58:15 svc:/network/physical:default
online          1:58:15 svc:/milestone/network:default
online          1:58:20 svc:/application/print/cleanup:default
online          1:58:21 svc:/system/picl:default
online          1:58:21 svc:/system/sysevent:default
online          1:58:21 svc:/system/device/fc-fabric:default
online          1:58:22 svc:/milestone/devices:default
online          1:58:28 svc:/system/sysidtool:net
online          1:58:30 svc:/system/sysidtool:system
online          1:58:30 svc:/network/nfs/status:default
online          1:58:45 svc:/network/ssh:default
...


第三列FMRI就是服務名稱。上述輸出中顯示了在Solaris 10中捆綁的Samba、Apache 1.3.x服務名稱,因爲它們仍然沿用了rc腳本的啓動方式,因此它們的名稱是以lrc開頭的,這類服務沒法用svcadm來管理。好比試圖運行命令svcadm enable lrc:/etc/rc3_d/S90samba,系統會報錯。上述輸出中顯示了ssh服務的服務名爲svc:/network/ssh:default。
用FMRI表示的服務名稱能夠惟一地標識一個服務,可是名稱一般都比較冗長,不便記憶。因此SMF容許服務名稱的縮寫,只要能夠惟一標識服務,scheme,instance,category均可以省。因此ssh服務的名稱能夠簡寫成ssh。簡寫的服務名在SMF的命令行工具中均可以使用。

使用FMRI方法命名服務後使得原先的服務名稱發生了變化,但經過如下方法能夠找SMF服務的名稱
1. 猜想法,根據該服務的關鍵詞得一個可能的服務名(guess_service_name),如Apache web服務能夠用apache,NFS文件服務能夠用nfs。    而後用svcs -a |grep guess_service_name。
2. 查看該服務所屬應用的文檔。

如下是常見服務的名稱
服務      最簡縮寫     FMRI
sshd      ssh          svc:/network/ssh:default
cron      cron         svc:/system/cron:default
automount autofs       svc:/system/filesystem/autofs:default
Apache2   apache2      svc:/system/filesystem/autofs:default
sendmail  sendmail     svc:/network/smtp:sendmail
nfs       nfs/server   svc:/network/nfs/server:default


管理SMF服務
管理SMF服務包括配置、查看、啓用/禁用、啓動/中止服務等任務。這些任務分別能夠用svccfg, svcs, svcadm命令完成。

svccfg命令
svccfg命令用來管理SMF repository。運行不帶參數的svccfg命令進入一個交互式的shell,在該shell裏能夠對服務、服務實例進行配置、導入、導出、備份、恢復操做。
#TODO:增長使用svccfg shell的例子。
最經常使用的操做是新增一個SMF服務時導入該服務的manifest文件,可使用svccfg import 的方法。使用svccfg import時要注意在目前版本的Solaris中(版本小於等於Solaris 10 1/06 ),若是manifest xml文件語法有錯,該命令不會報告xml文件出錯的具體位置,只會報一個籠統的錯誤信息。例如,postfix.xml文件的service元素沒有閉合,運行如下命令:
-bash-3.00# svccfg -v import postfix.xml
svccfg: couldn't parse document

會報沒法解析文檔的錯誤。所以,編寫完manifest xml文件應當驗證一下文件的有效性。

svcs命令
svcs
用於查看服務的狀態,
svcs -a
用於查看全部狀態的服務
svcs -x
用於查看未正常啓動的服務
svcs -l  
用於查看單個服務的詳細信息

svcadm
命令
svcadm
用來啓用/禁用、啓動/中止SMF服務。
svcadm enable fmri -- 
啓用一個SMF服務,同時運行該服務
svcadm disable fmri -- 
禁用一個SMF服務,同時中止該服務
svcadm restart fmri -- 
重啓一個SMF服務
svcadm refresh fmri -- 
刷新一個SMF服務,至關於讓服務從新載入配置文件
svcadm mark fmri -- 
SMF服務標記爲維護狀態
svcadm clear fmri -- 
清除SMF服務的維護狀態
svcadm milestone milestone -- 
進入指定的服務里程碑,至關於進入相應的運行級別
若是不指定參數,svcadm將輸出該命令的使用方法。
如:
-bash-3.00# svcadm
Usage: svcadm [-v] [cmd [args ... ]]

       svcadm enable [-rst]  ...      - enable and online service(s)
        svcadm disable [-st]  ...      - disable and offline service(s)
        svcadm restart  ...            - restart specified service(s)
        svcadm refresh  ...            - re-read service configuration
        svcadm mark [-It]   ... - set maintenance state
        svcadm clear  ...              - clear maintenance state
        svcadm milestone [-d]        - advance to a service milestone

        Services can be specified using an FMRI, abbreviation, or fnmatch(5)
        pattern, as shown in these examples for svc:/network/smtp:sendmail

       svcadm  svc:/network/smtp:sendmail
        svcadm  network/smtp:sendmail
        svcadm  network/*mail
        svcadm  network/smtp
        svcadm  smtp:sendmail
        svcadm  smtp
        svcadm  sendmail


SMF
服務排錯
使用svcs -xv能夠查找未正常啓動的服務。SMF對每一個服務實例都在/var/svc/log目錄建立了一個和服務FMRI對應的日誌文件,好比apache2服務的FMRI爲svc:/network/http:apache2,那麼apache2服務狀態變化的日誌存放在名爲network-http:apache2.log的文件中,
如運行如下命令
-bash-3.00# ls -l /var/svc/log  |grep network
-rw-r--r--   1 root     root         534 Feb  9 00:08 milestone-network:default.log
-rw-r--r--   1 root     root          77 Jan 30 15:25 network-dns-client:default.log
-rw-r--r--   1 root     root         169 Jan 30 15:27 network-dns-server:default.log
-rw-r--r--   1 root     root         803 Feb 13 01:17 network-http:apache2.log
-rw-r--r--   1 root     root        2843 Jan 30 15:30 network-inetd-upgrade:default.log
-rw-r--r--   1 root     root        2929 Feb 12 01:58 network-inetd:default.log
-rw-r--r--   1 root     root        2835 Feb 12 01:58 network-initial:default.log
-rw-r--r--   1 root     root          77 Jan 30 15:25 network-ipfilter:default.log
-rw-r--r--   1 root     root          77 Jan 30 15:25 network-iscsi_initiator:default.log

輸出的第四行列出了apache2服務的日誌文件名。經過查看這些文件能夠得到服務未正常啓動的線索。

SMF中的inetd服務
SMF包含了對inetd服務管理,除了標準的svccfg, svcadm, svcs命令外,SMF還提供了inetadm和inetconv專門管理inetd服務。inetadm命令用來查看、啓用/禁用、修改inetd服務,inetconv則是用來將舊的inetd服務配置轉化成SMF規範的服務。經常使用的inetadm選項以下
inetadm -e fmri 啓用指定的inetd服務
inetadm -d fmri 
禁用指定的inetd服務
inetadm -l fmri 
列出指定inetd服務的屬性
inetadm -p      
列出默認inetd服務的屬性
若是不指定參數inetadm將列出當前系統全部的inetd服務。如:
-bash-3.00# inetadm
ENABLED   STATE          FMRI
enabled   online         svc:/application/x11/xfs:default
enabled   online         svc:/application/font/stfsloader:default
enabled   offline        svc:/application/print/rfc1179:default
enabled   online         svc:/network/rpc/mdcomm:default
enabled   online         svc:/network/rpc/meta:default
enabled   online         svc:/network/rpc/metamed:default
enabled   online         svc:/network/rpc/metamh:default
enabled   online         svc:/network/rpc/gss:default
disabled  disabled       svc:/network/rpc/ocfserv:default
enabled   online         svc:/network/rpc/smserver:default
disabled  disabled       svc:/network/rpc/rex:default
enabled   online         svc:/network/rpc/rstat:default
enabled   online         svc:/network/rpc/rusers:default
disabled  disabled       svc:/network/rpc/spray:default
...

查看telnet服務的狀態:
-bash-3.00# inetadm |grep telnet
enabled   online         svc:/network/telnet:default

禁用telnet服務
-bash-3.00# inetadm -d telnet
查看telnet服務的狀態:
-bash-3.00# inetadm |grep telnet
disabled  disabled       svc:/network/telnet:default


SMF
兼容舊的rc機制,solaris 10 2006 update 1版本中有些服務仍然使用了舊的rc機制,以運行級別三的服務爲例,尚有如下服務未使用SMF:
-bash-3.00# ls -l /etc/rc3.d
total 30
-rw-r--r--   1 root     sys         1285 Jan 22  2005 README
-rwxr--r--   6 root     sys          474 Jan 22  2005 S16boot.server
-rwxr--r--   6 root     sys         1649 Jan  8  2005 S50apache
-rwxr-xr-x   1 root     sys          491 Jan  8  2005 S75seaport
-rwxr--r--   6 root     sys          685 Jan 22  2005 S76snmpdx
-rwxr--r--   6 root     sys         1125 Jan 22  2005 S77dmi
-rwxr--r--   6 root     sys          512 Jan 22  2005 S81volmgt
-rwxr-xr-x   5 root     sys         2225 Jan  8  2005 S82initsma
-rwxr--r--   5 root     sys          824 May 27  2004 S84appserv
-rwxr--r--   6 root     sys          324 Apr 20  2005 S90samba

其中S90samba,S50apache,S84appserv的存在代表Samba, Apache, Sun Application Server服務已啓用。

總結
  SMF提供了一個健壯的、可管理的後臺服務管理機制,它使系統管理更爲方便。在下一篇裏做者將結合實例討論將建立SMF服務的方法和步驟。 
  
相關的手冊
smf(5), svcadm(1M), svccfg(1M), inetadm(1M), svcs(1), svcprop(1), inetconv(1M) 
相關的文件和目錄
/etc/svc          -- 存放SMF服務配置庫
/var/svc/manifest -- 
存放SMF服務manifest xml文件
/var/svc/profile  -- 
存放SMF服務profile xml文件
/var/svc/log      -- 
存放SMF服務狀態變化日誌
/lib/svc/method   -- 
存放SMF服務啓動腳本
/lib/svc/seed     -- 
存放SMF服務配置庫的出廠設置web

相關文章
相關標籤/搜索