An SMF service and manifest for Smokeping

A few weeks after we got our NBN HFC1 service up and running, I set up Smokeping, which has been quite useful. What I forgot to do was create an SMF manifest and service script for it - so I missed a few days of monitoring when I updated to a newer build of Solaris.Next (or whatever that release ends up being called).

I’ve now fixed that oversight and thought I should share what I’d written. My installation is at /opt/smokeping/2.6.11, for the record.

Firstly, the manifest:

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
 Copyright (c) 2017 James C. McPherson. All rights reserved.
-->

<service_bundle type='manifest' name='smokeping'>

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

	<create_default_instance enabled='true' />
	
	<single_instance/>

        <dependency
                name='smokeping'
                type='service'
                grouping='require_all'
                restart_on='refresh'>
                <service_fmri value='svc:/network/http:apache24' />
        </dependency>

	<exec_method
		type='method'
		name='start'
		exec='/lib/svc/method/svc-smokeping %m'
		timeout_seconds='600' />

	<exec_method
		type='method'
		name='stop'
		exec=':kill'
		timeout_seconds='60' />

	<exec_method
		type='method'
		name='restart'
		exec=':kill'
		timeout_seconds='60' />

	<exec_method
		type='method'
		name='refresh'
		exec=':kill'
		timeout_seconds='60' />

	<template>
		<common_name>
			<loctext xml:lang='C'>
				Smokeping latency graph
			</loctext>
		</common_name>
		<description>
			<loctext xml:lang='C'>
Provides information about upstream connection latency.
			</loctext>
		</description>
	</template>

</service>

</service_bundle>

Now for the script itself:

#!/bin/sh

#
# Copyright (c) 2017, James C. McPherson. All rights reserved.
#

. /lib/svc/share/smf_include.sh

SMOKEPING=/opt/smokeping/2.6.11/bin/smokeping
PIDFILE=/var/smokeping/var/smokeping.pid


case "$1" in
'start')
        # check to see if we're still running
        if [ -f $PIDFILE ]; then
                ps -fp `cat $PIDFILE`;
                if [ $? -eq 0 ]; then
                        # still running, exit
                        exit 0
                fi
        fi
        rm -f $PIDFILE
        $SMOKEPING
        ;;

'restart')
	$SMOKEPING --restart
        ;;
'refresh')
	$SMOKEPING --reload
	;;
'stop')
        pkill smokeping
        rm -f $PIDFILE
        ;;
'*')
        echo "what do you want to do?"
        exit 99
        ;;
esac

You can download the manifest and method script directly if desired. For use, place the manifest in /lib/svc/manifest/site and svcadm restart manifest-import. Place the script in /lib/svc/method. Enjoy!