Creating a Solaris10 service


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Answers to Frequently Asked Questions Tips and Tutorials Creating a Solaris10 service
# 1  
Old 11-16-2006
Creating a Solaris10 service

The general steps required are:
o Determine the proccess for starting and stopping your service.
o Establish a name for the service, and the category this service falls into.
o Determine whether your service runs multiple instances.
o Identify any dependency relationships between this service and any other service.
o If a script is required to start and stop the process, create the script and place it in a local directory such as /usr/local/svc/method
o Create a service manifest file for your service. This file describes the service and any dependency relationships. Service manifests are pulled into the repository either by using svccfg command or at boot time.
o Incorporate the scripts into SMF using the svccfg utility.

The following displays an example.
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>

The following describes the entries in the file:

o Standard Header.
Code:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM
"/usr/share/lib/xml/dtd/service_bundle.dtd.1">

o Comment 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 The name of the service. the type(manifest) indicates a simple service rather than a milestone, the package providing the service, and the service name.
Code:
<service_bundle type='manifest' name='OPTnew:newservice'>

o Service category, type, name and version.
Code:
<service
    name='site/newservice'
    type='service'
    version='1'

o Whether multiple instances of the service will run.
Code:
<single_instance/>

o the service model to use. The entry shows that the service will be started by svc.startd. transient services are started once and not restarted.
Code:
<property_group name='startd' type='framework'>
                <propval name='duration' type='astring' value='transient' />
        </property_group>

o How the service is started and stopped.
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 Define any dependencies for this service. The first entry states that the newservice requires the filesystem/local service.
Code:
	<dependency
            name='usr'
            type='service'
            grouping='require_all'
            restart_on='none'>
                <service_fmri value='svc:/system/filesystem/local'/>
        </dependency>

o The second entry makes sure that your service is associated with the multi-user milestone and that the multi-user milestone requires this service.
Code:
        <dependency
            name='newservice'
            grouping='require_all'
            restart_on='none'>
            <service_fmri value='svc:/milestone/multi-user'/>
        </dependency>

o Creating the instance.
Code:
        <instance name='default' enabled='true' />

        <stability value='Unstable' />

o Creating information to describe the service.
Code:
        <template>
                <common_name>
                        <loctext xml:lang='C'>
                                New Service
                        </loctext>
                </common_name>
        </template>

The new service (newservice) now needs to be imported into SMF.
This is done by running the svccfg utility:
Code:
# svccfg import /var/svc/manifest/site/newservice.xml

After the service has been imported into the SMF it should be visable using the svcs command.
Code:
# svcs newservice
STATE		STIME	FMRI
online		8:57:35	svc:/site/newservice:default
#

It should also be possible to manipulate the service using 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
#

Finally, you can observe that the multiuser milestone requires the newservice in order to complete its requirements.
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
#


Last edited by blowtorch; 11-16-2006 at 09:12 PM.. Reason: to fix incomplete xml tag for service. the closing '>' was not present
This User Gave Thanks to For This Post:
Tornado
Login or Register to Ask a Question

Previous Thread | Next Thread

4 More Discussions You Might Find Interesting

1. Solaris

Service not starting Solaris10

On one of our server inetd service has stuck in transition state , tried restarting it but it does not do any thing and there is no associated inetd process for the same , how can i start it .. w/o rebooting it svcs inetd STATE STIME FMRI online* 16:44:55... (3 Replies)
Discussion started by: fugitive
3 Replies

2. Solaris

creating service in sun solaris

hi, any body have a idea how to create a service in sunsolaries(like windows).is it possible to create a service?.if any body having idea help me? regards suresh (3 Replies)
Discussion started by: suresh_rtp
3 Replies

3. AIX

Creating startup service for JBoss

Hello Friends, Does anyone know how to create a startup script for Jboss on IBM AIX 5.3? Please help me, I'd be highly grateful to you... Thanks & Regards, Vinit (0 Replies)
Discussion started by: vpatil6688
0 Replies

4. UNIX for Advanced & Expert Users

creating a service in init.d

Hai Friends I have written a DayTime server program using C socket.. I need to start the service automatically. My service directory is /etc/rc.d/init.d... my service name is DayTime present in /home/codebase/datetime/ directory.. Please help me :confused: :confused: :confused: Thanks in... (2 Replies)
Discussion started by: collins
2 Replies
Login or Register to Ask a Question