chinaux 发表于 2009-03-04 10:49

Solaris 10: 如何转换legacy_run服务

跟大家公享一篇挺不错的文档, 源于 http://www2.petervg.nl/cgi-bin/docs.cgi?a=read&doc=211

Convert legacy_run service without reboot
Table of Contents

1 Introduction
2 Current environment
3 Convert daemon into SMF service
3.1 Stop current daemon
3.2 Create service method
3.3 Create service manifest
3.4 Create new SMF service
4 Run new SMF service
5 Check new environment
6 Remove legacy_run entry
7 Disclaimer

1   Introduction
At boot your server starts a daemon with a script in /etc/init.d (/etc/rc.d). In Solaris 10 this will be a legacy_run service and it won't use any of the extra features provided by SMF.

So you decide to convert the legacy_run service into a real SMF service. After all the hard work you managed to convert the legacy_run service into a real service but how do you remove the legacy_run service from your server? svcs still shows the legacy_run service.

2   Current environment
server # svcs | grep petervg
legacy_run   13:06:32 lrc:/etc/rc3_d/S95petervgd

server # ps -o pid,ppid,args -e | grep petervg
509   1 /usr/bin/ksh /opt/petervgd/petervgd

server # cd /opt/petervgd
server # ls -l
total 2
-rwxr-xr-x   1 root   root          55 Oct2 12:56 petervgd
3   Convert daemon into SMF service
3.1   Stop current daemon
server # /etc/init.d/petervgd stop
petervg went asleep
Terminated

server # rm /etc/rc3.d/S95petervgd
3.2   Create service method
We can use an old-style Start/Stop script for a SMF service method.

server # cd /opt/petervgd
server # mv /etc/init.d/petervgd ./petervgd.method

server # ls -l
total 4
-rwxr-xr-x   1 root   root          55 Oct2 12:56 petervgd
-rwxr-xr-x   1 root   root         162 Oct2 12:57 petervgd.method
Add the following line to the beginning of the method:
. /lib/svc/share/smf_include.sh

server # cat petervg.method
#! /usr/bin/ksh

. /lib/svc/share/smf_include.sh

case "$1" in
      start)echo "petervg woke up"
                /opt/petervgd/petervgd &
                ;;
      stop)   echo "petervg went asleep"
                pkill petervgd
                ;;
esac

# eos
3.3   Create service manifest
Each service needs a description file which lists properties of the service like name, dependencies, use of contract, etc.

server # cp /var/svc/manifest/application/print/cleanup.xml petervgd.xml

server # vi /petervgd.xml
Change/Add/Delete any settings that needs to be modified in the manifest. Do not forget to change the name of the service into something different then application/print/cleanup.

3.4   Create new SMF service
server # svccfg import petervgd.xml
server # svcs "*petervg*"
STATE          STIME    FMRI
legacy_run   13:06:32 lrc:/etc/rc3_d/S95petervgd
disabled       14:47:32 svc:/site/petervgd:default
4   Run new SMF service
server # ps -o pid,ppid,args -e | grep petervg

server # svcadm enable petervgd

server # ps -o pid,ppid,args -e | grep peter
1426   1 /usr/bin/ksh /opt/petervgd/petervgd
5   Check new environment
server # svcs "*petervg*"
STATE          STIME    FMRI
legacy_run   13:06:32 lrc:/etc/rc3_d/S95petervgd
online         14:58:54 svc:/site/petervgd:default
There you have it. Your daemon is now running as a SMF service.

6   Remove legacy_run entry
One way of removing the legacy_run entry is rebooting your server. At the next boot the system will not find anything about your daemon in /etc/rc.d and therefor not start the legacy_run service.

The second method is by manually removing the entries about your legacy_run service from the /etc/repository.db database.

server # svccfg -s smf/legacy_run
svc:/smf/legacy_run>

svc:/smf/legacy_run> listpg *peter*
rc3_d_S95petervgdframework    NONPERSISTENT

svc:/smf/legacy_run> delpg rc3_d_S95petervgd
svc:/smf/legacy_run> exit
#

# svcs "*petervg*"
STATE          STIME    FMRI
online         14:58:54 svc:/site/petervgd:default

7   Disclaimer
I'm in no way responsible for what you do. Not even when you do it after reading my documents.

beyond_wyc 发表于 2013-06-05 10:52

grea t!很好很强大!
页: [1]
查看完整版本: Solaris 10: 如何转换legacy_run服务