]> git.ipfire.org Git - thirdparty/rrdtool-1.x.git/commitdiff
etc: add example LSB-based init scripts 490/head
authorPeter A. Bigot <pab@pabigot.com>
Mon, 19 May 2014 20:29:52 +0000 (15:29 -0500)
committerPeter A. Bigot <pab@pabigot.com>
Mon, 19 May 2014 21:02:13 +0000 (16:02 -0500)
These scripts support automated startup on Debian (Ubuntu) and other
distributions that follow the Linux Standards Base.

http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/tocsysinit.html

Signed-off-by: Peter A. Bigot <pab@pabigot.com>
.gitignore
configure.ac
etc/rrdcached-default-lsb.in [new file with mode: 0644]
etc/rrdcached-init-lsb [new file with mode: 0755]

index beb9359b0a9f000384caad29a9d889321ba42376..c7b29801a8557e6fc231b7a4e3bb966221253ce1 100644 (file)
@@ -39,6 +39,7 @@ Makefile
 /config.status
 /etc/rrdcached.service
 /etc/rrdcached.socket
+/etc/rrdcached-default-lsb
 /libtool
 /src/librrd.pc
 /src/librrd.sym.in
index a414ead56d75250324d2be7941feef4183bf21de..1a3af821c00178e9fd22f8e3930230a3da8d98cd 100644 (file)
@@ -931,6 +931,7 @@ AC_CONFIG_FILES([examples/4charts.pl])
 AC_CONFIG_FILES([examples/perftest.pl])
 AC_CONFIG_FILES([examples/Makefile])
 AC_CONFIG_FILES([examples/rrdcached/Makefile])
+AC_CONFIG_FILES([etc/rrdcached-default-lsb])
 AC_CONFIG_FILES([tests/Makefile])
 AC_CONFIG_FILES([doc/Makefile])
 AC_CONFIG_FILES([po/Makefile.in]) 
diff --git a/etc/rrdcached-default-lsb.in b/etc/rrdcached-default-lsb.in
new file mode 100644 (file)
index 0000000..f57289c
--- /dev/null
@@ -0,0 +1,44 @@
+# /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
diff --git a/etc/rrdcached-init-lsb b/etc/rrdcached-init-lsb
new file mode 100755 (executable)
index 0000000..550634b
--- /dev/null
@@ -0,0 +1,189 @@
+#!/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