Home   >>   Solaris   >>   How To Add A Service In SMF
How To Add A Service In SMF PDF Print E-mail
( 0 Votes )
How To - Solaris
Written by Christian Foronda   
Tuesday, 09 November 2010 15:29

Create appropriate directories and start/stop script:

	# mkdir /var/svc/manifest/network/ServiceName
	# vi /var/svc/manifest/network/ServiceName/myservice.xml

Note: Create an appropriate named XML file. Also have a browse of the directories - if your service is not a network service obviously do not put it under the network directory.

Sample XML based on Kannel:

	<?xml version="1.0"?>
	<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
	<!--
			Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
			Use is subject to license terms.

			#ident  "@(#)kannel.xml 1.1     07/05/23 SMI"

	-->

	<service_bundle type='manifest' name='SUNWkannel:gateway'>

	<service name='network/kannel' type='service' version='1'>

			<create_default_instance enabled='false' />

			<single_instance/>

			<dependency name='net-loopback' grouping='require_any'
							restart_on='none' type='service'>
					<service_fmri value='svc:/network/loopback' />
			</dependency>

			<dependency name='net-service' grouping='require_all'
							restart_on='none' type='service'>
					<service_fmri value='svc:/network/service'/>
			</dependency>

			<dependency name='net-physical' grouping='require_all'
							restart_on='none' type='service'>
					<service_fmri value='svc:/network/physical' />
			</dependency>

			<dependency name='filesystem-local' grouping='require_all'
							restart_on='none' type='service'>
							restart_on='none' type='service'>
					<service_fmri value='svc:/system/filesystem/local' />
			</dependency>


			<exec_method type='method' name='start'
					exec='/lib/svc/method/kannel start' 
					timeout_seconds='170' />

			<exec_method type='method' name='stop'
					exec='/lib/svc/method/kannel stop' 
					timeout_seconds='60' />

			<stability value='Unstable' />

	</service>

	</service_bundle>

You can create your own custom XML using this tool http://sgpit.com/smf/

Create the control script that will exec method calls:

	# vi /lib/svc/method/myservice
	#!/sbin/sh

	case $1 in
	'start')
	 /usr/local/bin/name_of_executable
	 ;;
	'stop')
	 /usr/bin/pkill -x -u 0 name_of_executable
	 ;;
	 *)
	 echo "Usage: $0 { start | stop }"
	 exit 1
	 ;;
	esac
	exit 0

You have to change your SMF control script to call your script in the exec method:

	# vi /var/svc/manifest/network/ServiceName/myservice.xml
	<exec_method type='method' name='start'
			exec='/usr/local/bin/name_of_executable start' 
			timeout_seconds='170' />

	<exec_method type='method' name='stop'
			exec='/usr/local/bin/name_of_executable stop' 
			timeout_seconds='60' />

Validate your XML document:

	# xmllint --valid /var/svc/manifest/network/ServiceName/myservice.xml
	# svccfg validate /var/svc/manifest/network/ServiceName/myservice.xml

Import it to SMF:

	# svccfg import /var/svc/manifest/network/ServiceName/myservice.xml

Verify in SMF. It should be now visible under SMF:

	# svcs ServiceName
	STATE          STIME    FMRI
	offline         14:26:06 svc:/network/ServiceName:default

Enable the service:

	# svcadm enable ServiceName

Reference:
http://www.dcs.bbk.ac.uk




blog comments powered by Disqus
Last Updated on Tuesday, 09 November 2010 15:31