Configuring Big Brother as a Solaris 10 Service
August 7, 2007 – 8:35 pmTip courtesy of Kyle Reynolds at http://www.camelrichard.org
mkdir /var/svc/manifest/application/monitoringcreate the /var/svc/manifest/application/monitoring/bigbrother.xml file. contents of bigbrother.xml (change directories, user, group, and stop/start script paths to fit your install):———————————————————————————
<?xml version=’1.0′?><!DOCTYPE service_bundle SYSTEM ‘/usr/share/lib/xml/dtd/service_bundle.dtd.1′><!– bigbrother.xml : BigBrother manifest, Kyle Reynolds 2006-07-02–> <service_bundle type=’manifest’ name=’bigbrother’><service name=’application/monitoring/bigbrother’ type=’service’ version=’1′>
<single_instance /> <dependency name=’multi-user-server’ grouping=’require_any’ restart_on=’error’ type=’service’> <service_fmri value=’svc:/milestone/multi-user-server:default’ /> </dependency>
<exec_method type=’method’ name=’start’ exec=’/u01/app/bb/bbc/runbb.sh start’ timeout_seconds=’120′ > <method_context> <method_credential user=’bbuser’ group=’bbgroup’ /> </method_context> </exec_method> <exec_method type=’method’ name=’stop’ exec=’/u01/app/bb/bbc/runbb.sh stop’ timeout_seconds=’120′ > <method_context> <method_credential user=’bbuser’ group=’bbgroup’ /> </method_context> </exec_method>
<instance name=’default’ enabled=’false’ /> <stability value=’Unstable’ />
<template> <common_name> <loctext xml:lang=’C'>Big Brother</loctext> </common_name> </template> </service></service_bundle>
——————————————————————————— run:
svccfg validate /var/svc/manifest/application/monitoring/bigbrother.xml (this validates the syntax of the xml file. If it returns the message: “svccfg: couldn’t parse document”, then try running: `xmllint /var/svc/manifest/application/monitoring/bigbrother.xml` for more detailed error messages). svccfg import /var/svc/manifest/application/monitoring/bigbrother.xml
svcadm enable svc:/application/monitoring/bigbrother:default (NOTE: Most Solaris 10 services consist of an xml file (like the one above) plus a start script (or method) that is stored under /lib/svc/method. I chose not to follow this standard for 2 reasons: first, big brother comes with it’s own start script; second, I have added this service initialization to a Solaris 10 package that is often installed in Solaris zones. The way I typically create a zone gives read-only access to the /lib dir, so the package cannot move the method to the /lib dir unless I change the way I implement zones, so this way, the service is more self-contained and works perfectly without my having to make changes to the zones.)