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

使用libscf.so實(shí)現(xiàn)SMF服務(wù)refresh方法( 四 )


本例只使用很少一部分libscf.so中的API調(diào)用,API調(diào)用列表可參考man libscf(3LIB) 。API調(diào)用具體定義可以參考man pages section 3: Extended Library Functions 。有關(guān)SMF服務(wù)、屬性組、屬性等概念,以及SMF服務(wù)開發(fā)方面更多信息,請(qǐng)參閱Solaris Service Management Facility - Service Developer Introduction 。
利用Sun公司最新推出的C/C/Fortran開發(fā)及編譯環(huán)境Sun Studio 11,使用以下命令可將本例將myapp.c編譯成可執(zhí)行程序myapp 。
$ /opt/SUNWspro/bin/cc -o ./myapp ./myapp.c
或者直接使用Solaris 10自帶的gcc編譯器將myapp.c編譯成可執(zhí)行程序myapp 。
$ /usr/sfw/bin/gcc -o ./myapp ./myapp.c
編譯成功后在當(dāng)前目錄下會(huì)生成myapp可執(zhí)行程序 。本例假設(shè)當(dāng)前目錄為/export/home/smfdemo 。直接在命令行輸入./myapp就可以啟動(dòng)myapp為后臺(tái)守護(hù)進(jìn)程 。
啟動(dòng)腳本
啟動(dòng)腳本定義了如何啟動(dòng)myapp服務(wù),以及與SMF相應(yīng)的返回值 。本例啟動(dòng)腳本如表2所示 。
表2. /export/home/smfdemo/myapp.sh
#!/sbin/sh
###############################################################################
# /export/home/smfdemo/myapp.sh #
###############################################################################
. /lib/svc/share/smf_include.sh
RUN_OK=0
CONFIG_ERROR=1
FATAL_ERROR=2
case "$1" in
'start')
/export/home/smfdemo/myapp
if [ $? -eq $CONFIG_ERROR ]; then
exit $SMF_EXIT_ERR_CONFIG
fi
if [ $? -eq $FATAL_ERROR ]; then
exit $SMF_EXIT_ERR_FATAL
fi
*)
echo "Usage: $0 start"
esac
exit $SMF_EXIT_OK
manifest文件
SMF manifest文件定義了SMF服務(wù)各屬性 。比如,定義服務(wù)名稱、服務(wù)依賴關(guān)系、服務(wù)啟動(dòng)方法、服務(wù)停止方法、服務(wù)刷新方法、服務(wù)所需參數(shù)等 。本例實(shí)現(xiàn)了refresh方法,相應(yīng)的manifest文件如表3所示 。
表3. /export/home/smfdemo/myapp.xml


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_smf.sh start'
timeout_seconds='60' />
type='method'
name='stop'
exec=':kill'
timeout_seconds='60' />
type='method'
name='refresh'
exec=':kill -8'
timeout_seconds='60' />



本列中refresh方法執(zhí)行變量exec被設(shè)為“:kill -8,通過kill命令向服務(wù)發(fā)送SIGUSR1信號(hào) 。與myapp.c中read_config()邏輯相對(duì)應(yīng),manifest文件中創(chuàng)建了 myapp屬性組(property group) 。它包含一個(gè)名為log_filename的字符型屬性,初始值設(shè)為/tmp/myapp.log 。有關(guān)manifest文件編寫詳細(xì)信息,請(qǐng)參看Solaris Service Management Facility - Service Developer Introduction 。
至此,使用libscf.so實(shí)現(xiàn)服務(wù)refresh方法的所有工作全部完成 。下節(jié)中講述如何將把myapp部署為SMF服務(wù)并作簡(jiǎn)單測(cè)試 。
部署和測(cè)試部署
管理和修改SMF服務(wù)分別需要solaris.smf.manage和solaris.smf.modify權(quán)限,具體請(qǐng)參看 smf_security(5) 。缺省只有root有此權(quán)限,可使用root部署SMF服務(wù) 。如果使用普通用戶賬號(hào),則需要root將solaris.smf.manage和 solaris.smf.modify權(quán)限賦予相關(guān)用戶 。方法是在/etc/user_attr文件中加入授權(quán)記錄 。比如為用戶hunter加入SMF管理和修改權(quán)限,則/etc/user_attr顯示如下,其中粗斜體部分為hunter所需的權(quán)限 。
# cat /etc/user_attr
#
# Copyright (c) 2003 by Sun Microsystems, Inc. All rights reserved.

推薦閱讀