NRPE and Solaris SMF
NRPE running under Solaris SMF control.
The SMF manifest:
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'>
<service_bundle type='manifest' name='export'>
<service name='application/monitoring/nrpe' type='service' version='0'>
<single_instance/>
<dependency name='fs-local' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/system/filesystem/local'/>
</dependency>
<dependency name='network-service' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/network/service'/>
</dependency>
<dependency name='name-service' grouping='require_all' restart_on='none' type='service'>
<service_fmri value='svc:/milestone/name-services'/>
</dependency>
<instance name='default' enabled='true'>
<dependency name='config-file' grouping='require_all' restart_on='refresh' type='path'>
<service_fmri value='file://localhost/usr/local/etc/nrpe/nrpe.cfg'/>
</dependency>
<exec_method name='start' type='method' exec='/local/lib/svc/method/nrpectl start' timeout_seconds='30'>
<method_context working_directory='/var/tmp'>
<method_credential user='nrpe' group='nrpe' privileges='basic,sys_resource,!proc_info,!file_link_any' limit_privileges='basic,sys_resource,!proc_info,!file_link_any'/>
</method_context>
</exec_method>
<exec_method name='stop' type='method' exec=':kill' timeout_seconds='60'/>
<exec_method name='refresh' type='method' exec='/local/lib/svc/method/nrpectl refresh' timeout_seconds='60'/>
<property_group name='nrpectl' type='application'>
<propval name='NRPE_CFG' type='astring' value='/usr/local/etc/nrpe/nrpe.cfg'/>
<propval name='NRPE_FQB' type='astring' value='/usr/local/sbin/nrpe'/>
</property_group>
</instance>
<template>
<common_name>
<loctext xml:lang='C'>NRPE</loctext>
</common_name>
<documentation>
<doc_link name='nagios.org' uri='http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf'/>
</documentation>
</template>
</service>
</service_bundle>
The associated method:
#!/bin/sh
. /lib/svc/share/smf_include.sh
NRPE_FQB=`svcprop -p nrpectl/NRPE_FQB $SMF_FMRI`
NRPE_BIN=`basename $NRPE_FQB`
NRPE_CFG=`svcprop -p nrpectl/NRPE_CFG $SMF_FMRI`
pid=`pgrep -x -d " " $NRPE_BIN`
case $1 in
'start') if [ -z "$pid" ]; then
smf_clear_env
$NRPE_FQB -c $NRPE_CFG -d >&2
if pgrep -x -d " " $NRPE_BIN >/dev/null 2>&1; then
:
else
echo "NRPE failed to start" >&2
exit $SMF_EXIT_ERR_FATAL
fi
else
echo "NRPE already running (pid=$pid)" >&2
exit $SMF_EXIT_ERR_OTHER
fi
;;
'refresh') if [ -z "$pid" ]; then
echo "NRPE not running; nothing to refresh" >&2
exit $SMF_EXIT_ERR_OTHER
else
pkill -x $NRPE_BIN
fi
;;
esac
exit $SMF_EXIT_OK
Season to taste.
