De algemene stappen die nodig zijn:
o Bepaal het proces voor het starten en stoppen van uw dienst.
o Instelling van een naam voor de service en de categorie van deze dienst valt in.
o Bepaal of uw dienst draait meerdere exemplaren.
o Identificeer eventuele afhankelijkheid van de verhoudingen tussen deze dienst en een andere dienst.
o Als een script nodig is voor het starten en stoppen van het proces, het script en plaats deze in een lokale map als / usr / local / svc / methode
o Maak een dienst manifestbestand voor uw dienst. Dit bestand beschrijft de dienst en eventuele afhankelijkheid relaties. Service manifesten zijn getrokken in de repository, hetzij door gebruik te maken van svccfg commando of tijdens het booten.
o Nemen de scripts in SMF svccfg met behulp van het hulpprogramma.
Het volgende geeft een voorbeeld.
Code:
# vi /usr/local/svc/method/newservice
#!/sbin/sh
#
# Copyright (c) 1995, 1997-1999 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident "@(#)newservice 1.14 06/11/17 SMI"
case "$1" in
'start')
/usr/bin/newservice &
;;
'stop')
/usr/bin/pkill -x -u 0 newservice
;;
*0
echo "Usage: $0 { start | stop }"
;;
esac
exit 0
# chmod 544 /usr/local/svc/method/newservice
# cd /var/svc/manifest/site
# vi newservice.xml
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
Copyright 2004 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
pragma ident "@(#)newservice.xml 1.2 04/08/09 SMI"
-->
<service_bundle type='manifest' name='OPTnew:newservice'>
<service
name='site/newservice'
type='service'
version='1'>
<single_instance/>
<dependency
name='usr'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
<dependency
name='newservice'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependency>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/newservice start'
timeout_seconds='30' />
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/newservice stop'
timeout_seconds='30' />
<property_group name='startd' type='framework'>
<propval name='duration' type='astring' value='transient' />
</property_group>
<instance name='default' enabled='true' />
<stability value='Unstable' />
<template>
<common_name>
<loctext xml:lang='C'>
New Service
</loctext>
</common_name>
</template>
</service>
</service_bundle>
De volgende beschrijving van de items in het bestand:
o Standaard Header.
Code:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">
o Commentaar afdeling.
Code:
<!--
Copyright 2004 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
pragma ident "@(#)newservice.xml 1.2 04/08/09 SMI"
-->
o De naam van de dienst. het type (kennelijk) duidt op een eenvoudige dienst in plaats van een mijlpaal, de verpakking die de dienst en de dienst naam.
Code:
<service_bundle type='manifest' name='OPTnew:newservice'>
o Service categorie, het type, de naam en versie.
Code:
<service
name='site/newservice'
type='service'
version='1'
o Of meerdere exemplaren van de dienst zal worden uitgevoerd.
o de service-model te gebruiken. De binnenkomst blijkt dat de dienst zal worden gestart door svc.startd. transiënte services zijn gestart eens en niet opnieuw gestart.
Code:
<property_group name='startd' type='framework'>
<propval name='duration' type='astring' value='transient' />
</property_group>
o Hoe de service wordt gestart en gestopt.
Code:
<exec_method
type='method'
name='start'
exec='/lib/svc/method/newservice start'
timeout_seconds='30' />
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/newservice stop'
timeout_seconds='30' />
o Definieer eventuele afhankelijkheden voor deze service. De eerste binnenkomst wordt gesteld dat de newservice vereist het bestandssysteem / lokale service.
Code:
<dependency
name='usr'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
o Het tweede item zorgt ervoor dat uw dienst wordt in verband gebracht met de multi-user mijlpaal, en dat de multi-user mijlpaal vereist deze dienst.
Code:
<dependency
name='newservice'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependency>
o Het creëren van de aanleg.
Code:
<instance name='default' enabled='true' />
<stability value='Unstable' />
o Het creëren van informatie ter beschrijving van de dienst.
Code:
<template>
<common_name>
<loctext xml:lang='C'>
New Service
</loctext>
</common_name>
</template>
De nieuwe dienst (newservice) moet nu worden geïmporteerd in SMF.
Dit wordt gedaan door het uitvoeren van de svccfg nut:
Code:
# svccfg import /var/svc/manifest/site/newservice.xml
Na de dienst is ingevoerd in de SMF moet worden zichtbaar met behulp van de Svcs commando.
Code:
# svcs newservice
STATE STIME FMRI
online 8:57:35 svc:/site/newservice:default
#
Het moet ook mogelijk zijn om het manipuleren van de service via svcadm.
Code:
# svcadm -v disable site/newservice
site/newservice disabled.
# svcs newservice
STATE STIME FMRI
disabled 9:07:15 svc:/site/newservice:default
# svcadm -v enable site/newservice
site/newservice enabled.
# svcs newservice
STATE STIME FMRI
online 9:17:01 svc:/site/newservice:default
#
Tenslotte kunt u constateren dat de meergebruikersomgeving mijlpaal moet de newservice om haar eisen.
Code:
# svcs -d milestone/multi-user:default
STATE STIME FMRI
disabled 8:43:16 svc:/platform/sun4u/sf880drd:default
online 8:43:16 svc:/milestone/name-services:default
online 8:43:33 svc:/system/rmtmpfiles:default
online 8:43:42 svc:/network/rpc/bind:default
online 8:43:46 svc:/milestone/single-user:default
online 8:43:46 svc:/system/utmp:default
online 8:43:47 svc:/system/system-log:default
online 8:43:49 svc:/system/filesystem/local:default
online 8:44:01 svc:/system/mdmonitor:default
online 9:17:01 svc:/site/newservice:default
#