使用libscf.so实现SMF服务refresh方法( 五 )


#
# /etc/user_attr
#
# user attributes. see user_attr(4)
#
#pragma ident "@(#)user_attr 1.1 03/07/09 SMI"
#
adm::::profiles=Log Management
lp::::profiles=Printer Management
root::::auths=solaris.*,solaris.grant;profiles=Web Console Management,All;lock_after_retrIEs=no
hunter::::auths=solaris.smf.manage,solaris.smf.modify
假设本例中开发目录和所有文件都位于/export/home/smfdemo目录下,则将本例部署为SMF服务的步骤如下:
1. 使用svccfg(1M)命令检查myapp.xml文件是否符合XML规范 。如果没问题则不会有任何输出,否则根据出错提示修改myapp.xml 。
# /usr/sbin/svccfg validate /export/home/smfdemo/myapp.xml
2. 使用svcs(1)命令看是否已存在名为myapp的服务 。如有则必须修改在myapp.xml中定义的服务名,否则继续 。
# /usr/bin/svcs application/myapp3. 使用svccfg(1M)命令加载myapp.xml所定义的服务并自动启动服务 。
# /usr/sbin/svccfg import /export/home/smfdemo/myapp.xml4. 使用svcs(1)命令查看myapp服务状态 。如状态为online,则说明部署已成功且已运行,否则参看出错原因以及SMF日志以确定问题所在,然后重复上文中相关的步骤后再试 。
# /usr/bin/svcs -xv application/myapp如果myapp部署成功,根据log_filename初始值设定,可以在/tmp目录下找到myapp.log文件 。使用/usr/bin/tail -f /tmp/myapp.log命令可以查看日志输出 。至此,myapp已经部署完毕 。
测试
测试的目的是确认myapp的refresh方法可以正常工作 。方法是通过svccfg(1M)命令将myapp服务log_filename属性值从 /tmp/myapp.log改为/tmp/myapp_new.log 。然后用svCADm refresh命令通知myapp服务重读配置 。如果在/tmp目录下新生成myapp_new.log,则说明refresh方法成功了 。具体步骤如下:
1. 确认myapp已经启动并处于online状态,并/tmp/myapp.log每隔5秒就有内容输出 。
# /usr/bin/svcs application/myapp
STATE STIME FMRI
online 10:53:57 svc:/application/myapp:default
# /usr/bin/tail -f /tmp/myapp.log
myapp is running at Fri Mar 10 10:57:12 2006
myapp is running at Fri Mar 10 10:57:17 2006
myapp is running at Fri Mar 10 10:57:22 2006
myapp is running at Fri Mar 10 10:57:27 2006
myapp is running at Fri Mar 10 10:57:32 2006
myapp is running at Fri Mar 10 10:57:37 2006
^C
2. 使用svccfg(1M)修改myapp服务myapp属性组中log_filename属性 。
# /usr/sbin/svccfg
svc:> select application/myapp
svc:/application/myapp> listprop
general framework
general/single_instance boolean true
milestone dependency
milestone/entitIEs fmri svc:/milestone/multi-user
milestone/grouping astring require_all
milestone/restart_on astring none
milestone/type astring service
start method
start/exec astring "/export/home/smfdemo/myapp.sh start"
start/timeout_seconds count 60
start/type astring method
stop method
stop/exec astring :kill
stop/timeout_seconds count 60
stop/type astring method
refresh method
refresh/exec astring ":kill -8"
refresh/timeout_seconds count 60
refresh/type astring method
myapp application
myapp/log_filename astring /tmp/myapp.log
svc:/application/myapp> setprop myapp/log_filename = "/tmp/myapp_new.log"
svc:/application/myapp> listprop
general framework
general/single_instance boolean true
milestone dependency
milestone/entities fmri svc:/milestone/multi-user
milestone/grouping astring require_all
milestone/restart_on astring none
milestone/type astring service
start method
start/exec astring "/export/home/smfdemo/myapp.sh start"
start/timeout_seconds count 60
start/type astring method
stop method
stop/exec astring :kill
stop/timeout_seconds count 60

推荐阅读