日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

應(yīng)用部署為Solaris 10 SMF服務(wù)( 三 )


'stop')
/usr/bin/pkill myapp
*)
echo "Usage: $0 { start | stop }"
esac
exit $RUN_OKSMF可部署的服務(wù)
本節(jié)講述如何將上述例子改為SMF可部署的服務(wù) 。根據(jù)SMF的要求,開(kāi)發(fā)一個(gè)SMF可部署的服務(wù)需要至少以下幾個(gè)步驟 。
創(chuàng)建manifest文件
SMF manifest文件是一個(gè)XML文件,它用以定義SMF服務(wù)各屬性 。比如,定義服務(wù)名稱、服務(wù)依賴關(guān)系、服務(wù)啟動(dòng)方法、服務(wù)停止方法、服務(wù)所需參數(shù)等 。創(chuàng)建manifest文件最簡(jiǎn)單的方法是從/var/svc/manifest目錄下挑選已存在的相同類型的服務(wù)XML文件,將它拷貝到開(kāi)發(fā)目錄,比如/export/home/smfdemo目錄下,以拷貝件為基礎(chǔ)修改而成 。本文是個(gè)簡(jiǎn)單的服務(wù),所以參考了 /var/svc/manifest/system/utmp.xml文件(因?yàn)樗埠芎?jiǎn)單),在其基礎(chǔ)上修改成表3所示的/export/home/smfdemo/myapp.xml 。
表3. 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37


name='application/myapp'
type='service'
version='1'>

name='milestone'
grouping='require_all'
restart_on='none'
type='service'>

type='method'
name='start'
exec='/export/home/smfdemo/myapp.sh start'
timeout_seconds='60' />
type='method'
name='stop'
exec=':kill'
timeout_seconds='60' />

myapp.xml必須符合/usr/share/lib/xml/dtd/service_bundle.dtd.1規(guī)范,其意理解如下:
1. 標(biāo)簽用以告知SMF如何處理myapp.xml文件 。本例中myapp.xml是一個(gè)manifest文件用以定義SMF服務(wù),所以type賦為“manifest 。同時(shí)需要給service_bundle一個(gè)名字,一般命名規(guī)范是以服務(wù)所在安裝包名為前綴,所以本例將name賦為“mypackage:myapp 。其實(shí)name只要不與系統(tǒng)中已有的相重就可以了,當(dāng)然對(duì)于企業(yè)級(jí)應(yīng)用服務(wù)應(yīng)該有一個(gè)合適的名字 。
2. 標(biāo)簽主要定義SMF服務(wù)的名稱,由于myapp只是一個(gè)簡(jiǎn)單應(yīng)用,所以name賦為“application/myapp 。如果myapp是網(wǎng)絡(luò)服務(wù),則根據(jù)命名規(guī)范名字應(yīng)以“network/開(kāi)頭加myapp,即 “network/myapp,請(qǐng)參考/var/svc/manifest/下的目錄結(jié)構(gòu)以此類推 。type當(dāng)然應(yīng)賦為“service 。至于version,根據(jù)情況設(shè)定,缺省取1 。
3. 根據(jù)需要SMF服務(wù)可以為同一個(gè)服務(wù)啟動(dòng)多個(gè)實(shí)例(instance) 。比如,在系統(tǒng)中同一種數(shù)據(jù)庫(kù)平臺(tái)可以啟動(dòng)多個(gè)服務(wù)實(shí)例,分別服務(wù)于不同的應(yīng)用;或者同一種WEB服務(wù)平臺(tái)啟動(dòng)多個(gè)服務(wù)實(shí)例,在不同的端口提供不同WEB應(yīng)用服務(wù)等 。在SMF框架中只需定義一個(gè)SMF service及屬性,在同一個(gè)service下定義不同的instance和特定屬性即可 。service下已定義的屬性適用于所有instance,但任何一個(gè)instance也可以根據(jù)需要特定某個(gè)或某幾個(gè)屬性 。比如增加屬性或覆蓋service同名屬性定義 。由于本例非常簡(jiǎn)單,只需一個(gè)服務(wù)一個(gè)實(shí)例就行了,所以采用標(biāo)簽,所有屬性全部采用service中的屬性即可 。
4. 由于希望myapp服務(wù)在系統(tǒng)boot時(shí)自動(dòng)啟動(dòng),所以將標(biāo)簽中enable置為“true 。
5. 是manifest文件中最難定義的部分,它定義了此服務(wù)所依賴的其他資源,包括服務(wù)、文件系統(tǒng)等 。一個(gè)SMF服務(wù)根據(jù)需要可以定義多個(gè),每個(gè)具有自己的標(biāo)識(shí)名name、grouping、 restart_on、type,以及所依賴的各資源的service_fmri 。其中name只是個(gè)標(biāo)識(shí),不相重有意義即可 。grouping取值定義了所列其他服務(wù)與本資源的依存關(guān)系,取值“require_all是指當(dāng)所列其他資源全部啟動(dòng)和可用后才能滿足本服務(wù)啟動(dòng)的要求 。restart_on 規(guī)定了當(dāng)所依賴的其他資源發(fā)生何種情況時(shí)需要重啟本服務(wù),取值“none是指只要本服務(wù)處于運(yùn)行狀態(tài)就行了,不必考慮所依賴的其他資源的狀態(tài)是否改變 。type指向依賴資源的類型,比如“service指服務(wù),“path指文件系統(tǒng)等 。service_fmri指其他服務(wù)的FMRI(Fault Management Resource IdengifIEr) 。本例僅需在/tmp目錄下生成日志文件,而“milestone/multi-user所指的運(yùn)行狀態(tài)完全可以滿足要求,所以 service_fmri設(shè)為“svc:/milestone/multi-user 。

推薦閱讀