Les grandes étapes sont nécessaires:
o Déterminer le processus de démarrage et l'arrêt de votre service.
o Créer un nom pour le service, et la catégorie de ce service s'inscrit dans.
o Déterminez si votre service est fourni par plusieurs instances.
o Identifier tous les rapports de dépendance entre ce service et tout autre service.
o Si un script est nécessaire pour démarrer et arrêter le processus, de créer le script et le placer dans un répertoire tel que / usr / local / svc / method
o Créez un fichier manifeste service pour votre service. Ce fichier décrit les services et toutes les relations de dépendance. Service manifeste sont arrachés dans le référentiel soit en utilisant svccfg commande ou au moment du démarrage.
o Intégrer les scripts en utilisant la SMF svccfg utilité.
Le texte suivant montre un exemple.
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>
La section suivante décrit les entrées dans le fichier:
o Standard Header.
Code:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">
o Commentaire Section.
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 Le nom du service. le type (manifeste) indique un simple service plutôt que d'une étape, le paquet qui fournit le service, et le nom du service.
Code:
<service_bundle type='manifest' name='OPTnew:newservice'>
o Service de la catégorie, le type, le nom et la version.
Code:
<service
name='site/newservice'
type='service'
version='1'
o La question de savoir si plusieurs instances du service fonctionnera.
o le modèle de service à utiliser. L'entrée indique que le service sera lancé par svc.startd. transitoire de services sont mis en marche une fois et de ne pas redémarré.
Code:
<property_group name='startd' type='framework'>
<propval name='duration' type='astring' value='transient' />
</property_group>
o Comment le service est démarré et arrêté.
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 Définir une dépendance pour ce service. La première entrée indique que le requiert le système de fichiers newservice / service local.
Code:
<dependency
name='usr'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
o La deuxième entrée fait en sorte que votre service est associé à l'événement multi-utilisateur et que la multi-étape exige que l'utilisateur de ce service.
Code:
<dependency
name='newservice'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/milestone/multi-user'/>
</dependency>
o Création de l'instance.
Code:
<instance name='default' enabled='true' />
<stability value='Unstable' />
o Création d'informations pour décrire le service.
Code:
<template>
<common_name>
<loctext xml:lang='C'>
New Service
</loctext>
</common_name>
</template>
Le nouveau service (newservice) doit maintenant être importés dans SMF.
Ceci est fait en exécutant l'utilitaire svccfg:
Code:
# svccfg import /var/svc/manifest/site/newservice.xml
Après le service a été importé dans la SMF, il devrait être visible à l'aide de la commande Svcs.
Code:
# svcs newservice
STATE STIME FMRI
online 8:57:35 svc:/site/newservice:default
#
Il devrait également être possible de manipuler le service en utilisant 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
#
Enfin, vous pouvez constater que le multi-étape exige la newservice afin de mener à bien ses exigences.
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
#