AIX服務概述
在Windows中,服務标志着一個元件、一套應用、一套程序結構,這是大家所熟悉的。在AIX中也有類似Windows系統的組成構件。随着AIX的啟動,各種在AIX中定制的子系統、子服務、系統組也會被啟動。子系統、子服務、子系統組這三個概念之間的關系如下:
AIX将各種功能以組的形式展現,稱之為子系統(Subsystem)。一個子系統就是可以通過控制系統操作的一個或一組程式或程序的集合,用來提供某類指定的功能,例如ypsery、dhcpsd 、xntpd、inetd、syslogd、sendmail等。
可再将子系統提供的服務細分為子服務(Subserver)。一個子服務是屬于某個子系統的程式或程序,若幹子服務可以構成一個子系統。
可以将若幹具有相關性功能的子系統編制為子系統組(Subsystem Group),這是SRC可以管理的最高層次。
子系統組、子系統、子服務按照層次結構組織,構成了AIX的“服務”體系。下圖所示為一個子系統組tcpip及其包含的幾個子系統,其中inetd子系統又包含了若幹子服務。
系統資源控制器
在AIX中,系統資源控制器(System Resource Controller,SRC)用來管理子系統。SRC擁有若幹指令,用來檢視(lssrc)、關閉(stopsrc)、啟動(startsrc)、重新整理子系統(refresh)。例如,可以使用lssrc-a指令檢視目前運作的系統中子系統的活動情況,其中沒有程序号的處于未啟動狀态。
lssrc
用途
擷取子系統、子系統組或子伺服器的狀态。
描述
lssrc 指令發送請求到“系統資源控制器”以擷取子系統、子系統組或所有子系統上的狀态。lssrc 指令發送子系統請求包到守護程式,守護程式接着轉發給子系統以擷取子伺服器狀态或長型子系統狀态。
lssrc 指令的輸出結果有時可以為特殊的守護程式顯示兩項執行個體。一個執行個體是活動的,而另一個執行個體卻是不起作用的。如果在不停止子系統的情況下修改子系統(使用 mkssys 指令或 chssys 指令),那麼可能會發生這種情況。原始子系統保持活動,但已修改的執行個體還不起作用,直到子系統停止并重新啟動。
标志
-a | 列出所有已定義的子系統的目前狀态。 |
-d | 指定列印預設記錄。 |
-g | 指定要擷取狀态的子系統組。如果子系統對象類中不包含 GroupName |
-h | 指定請求狀态操作的外部主機。本地使用者必須以“root 使用者”運作。遠端系統必須配置接受遠端“系統資源控制器”請求。即 srcmstr 守護程式(請參閱 /etc/inittab )必須已啟動 -r 标志以及 /etc/hosts.equiv 或.rhosts |
-l | 請求子系統以長格式發送它的目前狀态。長狀态要求發送一個狀态請求到子系統;傳回該狀态是子系統的職責。 |
-nNotifyName | 指定一個通知方法的名稱。 |
-N | 指定以 SMIT 格式輸出“對象資料管理器”(ODM)的通知對象類記錄。 |
-o | 指定将子伺服器 Object |
-p | 指定要擷取其狀态的 SubsystemPID |
-P | 指定一個 SubserverPID |
-sSubsystem | 指定一個擷取狀态的子系統。Subsystem 變量可以是子系統的真實子系統名或同義名。如果子系統對象類中不包含 Subsystem |
-S | 指定以 SMIT 格式輸出子系統對象類的 ODM 記錄。 |
-t | 請求子系統發送子伺服器的目前狀态。如果子伺服器對象類中不包含 Type |
-T | 指定以 SMIT 格式輸出子伺服器對象類的 ODM 記錄 |
示例
要擷取本地機器上所有子系統的狀态,請輸入:
lssrc -a
本指令擷取本地機器上已知的所有子系統的狀态。
要擷取外部主機上的所有子系統的狀态,請輸入:
lssrc -h zork -a
本指令擷取 zork 機器上已知的所有子系統的狀态。
擷取 srctest 子系統的狀态,請輸入:
lssrc -s srctest
本指令擷取本地機器的 srctest 子系統上的所有執行個體狀态。
要使用 PID 擷取子系統狀态,請輸入:
lssrc -p 1234
本指令擷取本地機器上 PID 為 1234 的子系統的狀态。
要擷取 tcpip 子系統組的狀态,請輸入:
lssrc -g tcpip
本指令擷取本地機器上 tcpip 組中子系統的所有執行個體的狀态。
要擷取 tester 子伺服器的狀态,請輸入:
lssrc -t tester -p 1234
本指令擷取 tester 子伺服器上屬于 srctest 子系統中 PID 為 1234 的子系統的狀态。
要使用 PID 擷取子系統狀态,請輸入:
lssrc -l -p 1234
本指令擷取 PID 為 1234 的子系統的長狀态。
startsrc
用途
啟動子系統、子系統組或子伺服器。
描述
startsrc 指令向系統資源控制器(System Resource Controller, SRC)發送請求以啟動子系統或子系統組,或向啟動子伺服器的子系統發送一個資訊包。
如果啟動子伺服器的請求發送到 SRC,且該子伺服器所屬的子系統目前不活動,那麼 SRC 會啟動子系統,并将啟動子伺服器的請求發送給子系統。
示例
-a | 指定子系統執行時傳遞給子系統的自變量字元串。該字元串從指令行發送,并附加在子系統對象類中的指令行自變量上。指定的 Argument |
-e | 當子系統執行時,指定一個放入子系統環境中的環境字元串。指定的 Environment 字元串的最大長度為 1200 個字元,否則指令将失敗。使用與 shell 所使用的相同的規則,SRC 為子系統設定環境。 引号引起的字元串指定給一個單一的環境變量,并且引号引起的字元串外的空格定界了每個要設定的環境變量。例如,-e "HOME=/tmp TERM=dumb MESSAGE=\"Multiple word message\"" 将 HOME=/tmp 設定為子系統第一個環境變量,将 TERM=dumb 設定為子系統第二個環境變量,将 MESSAGE="Multiple word message" |
-g | 指定一組要啟動的子系統。如果 Group |
-h | 指定在其上請求此啟動操作的外部主機。本地使用者必須作為“root”使用者運作。必須配置遠端系統以接受系統資源控制器的請求。也就是說,srcmstr 守護程式(請參閱 /etc/inittab )必須用 -r 标志啟動,并且必須配置/etc/hosts.equiv 或 .rhosts |
-o | 指定子伺服器對象作為字元串傳遞給子系統。确定 Object |
-p | 指定啟動子伺服器請求要發送到的子系統的特定執行個體。 |
-s Subsystem | 指定要啟動的子系統。Subsystem 可以是實際的子系統名,或子系統的同義詞名稱。如果 Subsystem |
-t | 指定要啟動的子伺服器。如果子伺服器對象類中未包含 Type ,指令将失敗。 |
示例
要使用參數和環境變量啟動一個子系統,請輸入:
startsrc -s srctest -a "-D DEBUG" -e "TERM=dumb HOME=/tmp"
這将使用其環境中的 "TERM=dumb" 、"HOME=/tmp"并且将 "-D DEBUG" 作為該子系統的兩個參數來啟動 srctest 子系統。
要啟動外部主機上的子系統組,請輸入:
startsrc -g tcpip -h zork
這将啟動 zork 機器上 tcpip 子系統組中所有的子系統。
要啟動一個子伺服器,請輸入:
startsrc -t tester
這将向擁有 tester 子系統的子系統發送啟動子伺服器的請求。
要使用指令參數啟動一個子系統,請輸入:
startsrc -s srctest -a "-a 123 -b \"4 5 6\""
這将使 "-a" 作為 srctest 子系統的第一個參數,"123" 作為第二個參數,"-b" 作為第三個參數,而 "456" 作為第四個參數。
stopsrc
用途
停止子系統、子系統組或子伺服器。
描述
stopsrc 指令向系統資源控制器(SRC)發送要求停止一個子系統、一組子系統或所有子系統的請求。stopsrc 指令向系統資源控制器發送子系統請求包,該請求包轉發至子系統用于停止子伺服器的請求。
如果沒有 -f(強制停止)标志, 則假設為正常的停止操作。正常停止要求子系統或子伺服器完成所有目前處理,在所有應用程式活動完成時釋放資源,然後結束。子系統不再接受任何新的工作請求。
強制停止要求子系統或子伺服器迅速結束,釋放所有資源,但不等待應用程式活動完成。
取消操作是在子系統的資源釋放後以及一段寬延時間後才停止子系統。此寬延時間在子系統的對象類中指定。取消停止隻用于子系統的停止,并且總是以 SIGTERM 信号發送給子系統。子系統抓取這個信号,執行子系統清除操作,然後結束。如果子系統沒有在等待時間内結束(等待時間在子系統對象類中指定),那麼将 SIGKILL 信号發送給子系統以確定子系統的停止。
如果子系統使用套接字或消息隊列進行通信,那麼構造一個資料包并發送給子系統。如果子系統使用信号進行通信,那麼将子系統對象類中的适當的信号發送給子系統。 标志
-a | 指定停止所有子系統。 |
-c | 指定停止請求是已取消的停止請求。對于取消停止請求,将 SIGTERM 信号發送到子系統。在子系統對象類中指定的等待時間過去後,如果子系統仍未停止,那麼将 SIGKILL |
-f | 指定強制停止請求。 |
-g | 指定停止一組子伺服器。如果 Group |
-h | 指定請求該停止操作的外部 Host 機器。本地使用者必須作為“root”使用者運作。必須配置遠端系統以接受系統資源控制器的請求。即 srcmstr 守護程式(請參閱 /etc/inittab )必須用 -r 标志啟動,并且必須配置/etc/hosts.equiv 或 .rhosts |
-o | 指定子伺服器 Object |
-p | 指定要停止的子系統的特定執行個體,或子伺服器(停止子伺服器請求要傳遞到該子系統)的特定執行個體。 |
-P | 指定子伺服器 PID 是作為字元串傳遞給子系統的。 |
-s | 指定要停止的子系統。Subsystem 參數可以是實際的子系統名稱或子系統的同義詞名稱。stopsrc 指令停止所有目前活動的子系統執行個體。如果 Subsystem |
-t | 指定要停止的子伺服器。如果子伺服器對象類中未包含指定的 Type ,stopsrc |
示例
要在外部主機上強制停止一個子系統,請輸入:
stopsrc -h zork -s srctest -f
這将強制停止 zork 機器上的 srctest 子系統的所有執行個體。
要取消停止一個子系統組,請輸入:
stopsrc -g tcpip -c
這将在 tcpip 組的所有子系統上激活停止取消。
要停止一個子伺服器,請輸入:
stopsrc -t tester -p 1234
這将停止 tester 子伺服器,它屬于子系統 PID 為 1234 的 srctest 子系統。
要停止所有子系統,請輸入:
stopsrc -a
這将停止本地機器上所有活動的子系統。
refresh
用途
請求子系統或子系統組的重新整理。
描述
refresh 指令發送一個轉發到該子系統的子系統重新整理請求給系統資源控制器。重新整理操作依賴于子系統。
注意:如果子系統的通信方法是信号,refresh指令失敗。
标志
-g | 指定一組要重新整理的子系統。如果 Group 名稱不包含在子系統對象類中,refresh |
-h | 指定外部的 Host 機器,在該機器上請求重新整理操作。本地使用者必須作為“root”使用者運作。 必須配置遠端系統以接受遠端系統資源控制器請求。就是說,srcmstr 守護程式(參閱 /etc/inittab )必須以 -r 标志啟動,并且必須配置 /etc/hosts.equiv 或 .rhosts |
-p | 指定特定的要重新整理的子系統執行個體。 |
-s | 指定要重新整理的子系統。Subsystem 名稱可以是實際的子系統名稱或者子系統的同義名稱。 如果 Subsystem 名稱不包含在子系統對象類中,refresh |
示例
要重新整理組,比如 tcpip,請輸入:
refresh -g tcpip
要重新整理子系統,比如 xntpd,請輸入:
refresh -s xntpd
服務相關
相關檔案
/etc/objrepos/SRCsubsys | 指定 SRC 子系統配置對象類。 |
/etc/objrepos/SRCsubsvr | 指定 SRC 子伺服器配置對象類。 |
/etc/services | 定義用于網際網路服務的套接字和協定。 |
/dev/SRC | 指定 AF_UNIX |
/dev/.SRC-unix | 指定臨時套接字檔案位置。 |
檢視SRC服務
$ps -ef|grep srcmstr
frp 618582 931544 0 15:00:09 pts/3 0:00 grep srcmstr
root 58126 1 0 Jun 01 - 0:13 /usr/sbin/srcmstr
$grep srcmstr /etc/inittab
srcmstr:23456789:respawn:/usr/sbin/srcmstr # System Resource Controller
檢視ODM庫中子服務資訊
$odmget SRCsubsvr
SRCsubsvr:
sub_type = "ftp"
subsysname = "inetd"
sub_code = 21
SRCsubsvr:
sub_type = "uucp"
subsysname = "inetd"
sub_code = 540
SRCsubsvr:
sub_type = "telnet"
subsysname = "inetd"
sub_code = 23
SRCsubsvr:
sub_type = "shell"
subsysname = "inetd"
sub_code = 514
SRCsubsvr:
sub_type = "login"
subsysname = "inetd"
sub_code = 513
SRCsubsvr:
sub_type = "exec"
subsysname = "inetd"
sub_code = 512
SRCsubsvr:
sub_type = "finger"
subsysname = "inetd"
sub_code = 79
SRCsubsvr:
sub_type = "tftp"
subsysname = "inetd"
sub_code = 69
檢視ODM庫中子系統定義
$odmget SRCsubsys |more
SRCsubsys:
subsysname = "inetd"
synonym = ""
cmdargs = ""
path = "/usr/sbin/inetd"
uid = 0
auditid = 0
standin = "/dev/console"
standout = "/dev/console"
standerr = "/dev/console"
action = 2
multi = 0
contact = 3
svrkey = 0
svrmtype = 0
priority = 20
signorm = 0
sigforce = 0
display = 1
waittime = 20
grpname = "tcpip"
SRCsubsys:
subsysname = "sshd"
synonym = ""
cmdargs = "-D"
path = "/usr/sbin/sshd"
uid = 0
auditid = 0
standin = "/dev/console"
standout = "/dev/console"
standerr = "/dev/console"
action = 1
multi = 0
contact = 2
svrkey = 0
svrmtype = 0
priority = 20
signorm = 15
sigforce = 9
display = 1
waittime = 20
grpname = "ssh"