--- /dev/null
+# /etc/default file for RRD cache daemon
+
+# Full path to daemon
+DAEMON=@prefix@/bin/rrdcached
+
+# Optional override flush interval, in seconds.
+#WRITE_TIMEOUT=300
+
+# Optional override maximum write delay, in seconds.
+#WRITE_JITTER=0
+
+# Optional override number of write_threads
+#WRITE_THREADS=4
+
+# Where database files are placed. If left unset, the default /tmp will
+# be used. NB: The daemon will reject a directory that has symlinks as
+# components. NB: You may want to have -B in BASE_OPTS.
+BASE_PATH=/var/lib/rrdcached/db/
+
+# Where journal files are placed. If left unset, journaling will
+# be disabled.
+JOURNAL_PATH=/var/lib/rrdcached/journal/
+
+# FHS standard placement for process ID file.
+PIDFILE=/var/run/rrdcached.pid
+
+# FHS standard placement for local control socket.
+SOCKFILE=/var/run/rrdcached.sock
+
+# Optional override group that should own/access the local control
+# socket
+#SOCKGROUP=root
+
+# Optional override access mode of local control socket.
+#SOCKMODE=0660
+
+# Network socket address requests. Use in conjunction with SOCKFILE to
+# also listen on INET domain sockets. (The option is a lower-case ell
+# ASCII 108 = 0x6c, and should be repeated for each address.).
+NETWORK_OPTIONS="-l :42217"
+
+# Any other options not specifically supported by the script (-P, -f,
+# -F, -B).
+BASE_OPTIONS=-B
--- /dev/null
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides: rrdcached
+# Required-Start: $local_fs $remote_fs $named $time $network
+# Required-Stop: $local_fs $remote_fs $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: start or stop rrdcached
+# Description: Daemon that accumulates updates to RRD files and flushes
+# them periodically or on command.
+### END INIT INFO
+#
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+
+NAME=rrdcached
+DESC="RRD cache daemon"
+DAEMON=/usr/bin/rrdcached
+
+DEFAULT=/etc/default/rrdcached
+test -f ${DEFAULT} && . ${DEFAULT}
+
+PIDFILE=${PIDFILE:-/var/run/${NAME}.pid}
+
+RRDCACHED_OPTIONS="\
+ ${BASE_OPTIONS} \
+ ${NETWORK_OPTIONS} \
+ ${WRITE_TIMEOUT:+-w ${WRITE_TIMEOUT}} \
+ ${WRITE_JITTER:+-z ${WRITE_JITTER}} \
+ ${WRITE_THREADS:+-t ${WRITE_THREADS}} \
+ ${BASE_PATH:+-b ${BASE_PATH}} \
+ ${JOURNAL_PATH:+-j ${JOURNAL_PATH}} \
+ -p ${PIDFILE} \
+ ${SOCKFILE:+-l unix:${SOCKFILE} ${SOCKGROUP:+-s ${SOCKGROUP}} ${SOCKMODE:+-m ${SOCKMODE}}} \
+ "
+
+. /lib/lsb/init-functions
+
+RETVAL=1
+
+# Do any pre-start checks. If this returns nonzero, the failure
+# diagnostic has already been generated.
+validate_prestart () {
+ if [ -n "${JOURNAL_PATH}" -a ! -d "${JOURNAL_PATH}" ] ; then
+ mkdir -p "${JOURNAL_PATH}"
+ if [ 0 != $? ] ; then
+ log_failure_msg "${NAME}: Unable to find/create journal directory ${JOURNAL_PATH}"
+ return 1
+ fi
+ fi
+ if [ -n "${BASE_PATH}" -a ! -d "${BASE_PATH}" ] ; then
+ mkdir -p "${BASE_PATH}"
+ if [ 0 != $? ] ; then
+ log_failure_msg "${NAME}: Unable to find/create base directory ${BASE_PATH}"
+ return 1
+ fi
+ fi
+ return 0
+}
+
+# Whatever's necessary to start a daemon. Any currently-running
+# daemon is left unmolested and no new daemon is started. Return as
+# with start_daemon.
+do_start () {
+ start_daemon -p ${PIDFILE} ${DAEMON} ${RRDCACHED_OPTIONS}
+ return $?
+}
+
+# Perform a restart from a state with no daemon running. This
+# function emits the success/failure diagnostics. Return as with
+# restart.
+do_restart_diag () {
+ validate_prestart
+ if [ 0 != $? ] ; then
+ rv=$?
+ else
+ do_start
+ rv=$?
+ if [ 0 = $? ] ; then
+ log_success_msg "${NAME} restarted"
+ else
+ log_failure_msg "${NAME} restart failed"
+ fi
+ fi
+ return ${rv}
+}
+
+# Whatever's necessary to check daemon status. Sets PID if the daemon
+# is running. Return as pidofproc.
+do_status () {
+ PID=$( pidofproc -p ${PIDFILE} ${DAEMON} )
+ return $?
+}
+
+# Whatever's necessary to stop the daemon. Returns as stop action.
+do_stop () {
+ killproc -p ${PIDFILE} ${DAEMON}
+ rv=$?
+ # rrdcached traps the TERM signal and does some flushing.
+ # Give it a chance to shut down before returning, lest
+ # we restart it too soon.
+ max_iters=${STOP_WAIT_DELAY:-5}
+ while [ 0 -lt ${max_iters} ] ; do
+ if pidofproc -p ${PIDFILE} ${DAEMON} >/dev/null ; then
+ log_warning_msg "${NAME} is still running"
+ sleep 1
+ max_iters=$(( ${max_iters} - 1 ))
+ rv=1
+ else
+ rv=0
+ break
+ fi
+ done
+ return $?
+}
+
+case "$1" in
+ start)
+ # Succeed if service already started or start attempt succeeds
+ if do_status > /dev/null ; then
+ log_success_msg "${NAME} is already started as ${PID}"
+ RETVAL=0
+ else
+ validate_prestart
+ RETVAL=$?
+ if [ 0 = ${RETVAL} ] ; then
+ do_start
+ RETVAL=$?
+ if [ 0 = ${RETVAL} ] ; then
+ log_success_msg "${NAME} started"
+ else
+ log_failure_msg "${NAME} FAILED"
+ fi
+ fi
+ fi
+ ;;
+ stop)
+ if pidofproc -p ${PIDFILE} ${DAEMON} > /dev/null ; then
+ do_stop
+ RETVAL=$?
+ if [ 0 = ${RETVAL} ] ; then
+ log_success_msg "${NAME} has been stopped"
+ else
+ log_failure_msg "${NAME} was not stopped"
+ fi
+ else
+ log_success_msg "${NAME} was already stopped"
+ RETVAL=0
+ fi
+ ;;
+ restart)
+ do_stop
+ do_restart_diag
+ RETVAL=$?
+ ;;
+ try-restart)
+ if pidofproc -p ${PIDFILE} ${DAEMON} > /dev/null ; then
+ do_stop
+ do_restart_diag
+ RETVAL=$?
+ else
+ # Yes, try-restart when the system is not running is
+ # success.
+ log_success_msg "${NAME} not running"
+ RETVAL=0
+ fi
+ ;;
+ reload|force-reload)
+ RETVAL=3
+ log_failure_msg "${NAME} does not support $1"
+ ;;
+ status)
+ do_status
+ RETVAL=$?
+ if [ 0 = "${RETVAL}" ] ; then
+ log_success_msg "${NAME} status ${RETVAL} is running as ${PID}"
+ else
+ log_failure_msg "${NAME} is not running"
+ fi
+ ;;
+ '')
+ log_warning_msg "No command (try: status)"
+ ;;
+ *)
+ log_warning_msg "Unrecognized command: $1"
+ ;;
+esac
+
+exit $RETVAL