From Mike Hammett, 5 Years ago, written in Plain Text.
Embed
  1. root@indy-librenms:/home/mhammett# cat /etc/init.d/rrdcached
  2. #!/bin/sh
  3. ### BEGIN INIT INFO
  4. # Provides: rrdcached
  5. # Required-Start: $local_fs $remote_fs $named $time $network
  6. # Required-Stop: $local_fs $remote_fs $network
  7. # Default-Start:  2 3 4 5
  8. # Default-Stop: 0 1 6
  9. # Short-Description: start or stop rrdcached
  10. # Description: Daemon that accumulates updates to RRD files and flushes
  11. #              them periodically or on command.
  12. ### END INIT INFO
  13. #
  14.  
  15. PATH=/sbin:/usr/sbin:/bin:/usr/bin
  16.  
  17. NAME=rrdcached
  18. DESC="RRD cache daemon"
  19. DAEMON=/usr/bin/rrdcached
  20.  
  21. DEFAULT=/etc/default/rrdcached
  22. test -f ${DEFAULT} && . ${DEFAULT}
  23.  
  24. PIDFILE=${PIDFILE:-/var/run/${NAME}.pid}
  25.  
  26. RRDCACHED_OPTIONS="\\
  27.   ${BASE_OPTIONS} \\
  28.   ${NETWORK_OPTIONS} \\
  29.   ${WRITE_TIMEOUT:+-w ${WRITE_TIMEOUT}} \\
  30.   ${WRITE_JITTER:+-z ${WRITE_JITTER}} \\
  31.   ${WRITE_THREADS:+-t ${WRITE_THREADS}} \\
  32.   ${BASE_PATH:+-b ${BASE_PATH}} \\
  33.   ${JOURNAL_PATH:+-j ${JOURNAL_PATH}} \\
  34.   ${DAEMON_GROUP:+-G ${DAEMON_GROUP}} \\
  35.   ${DAEMON_USER:+-U ${DAEMON_USER}} \\
  36.   -p ${PIDFILE} \\
  37.   ${SOCKFILE:+${SOCKGROUP:+-s ${SOCKGROUP}} ${SOCKMODE:+-m ${SOCKMODE}} -l unix:${SOCKFILE}} \\
  38.     "
  39.  
  40. . /lib/lsb/init-functions
  41.  
  42. RETVAL=1
  43.  
  44. # Do any pre-start checks.  If this returns nonzero, the failure
  45. # diagnostic has already been generated.
  46. validate_prestart () {
  47.     if [ -n "${JOURNAL_PATH}" -a ! -d "${JOURNAL_PATH}" ] ; then
  48.         mkdir -p "${JOURNAL_PATH}"
  49.         if [ 0 != $? ] ; then
  50.             log_failure_msg "${NAME}: Unable to find/create journal directory ${JOURNAL_PATH}"
  51.             return 1
  52.         fi
  53.     fi
  54.     if [ -n "${BASE_PATH}" -a ! -d "${BASE_PATH}" ] ; then
  55.         mkdir -p "${BASE_PATH}"
  56.         if [ 0 != $? ] ; then
  57.             log_failure_msg "${NAME}: Unable to find/create base directory ${BASE_PATH}"
  58.             return 1
  59.         fi
  60.     fi
  61.     return 0
  62. }
  63.  
  64. # Whatever's necessary to start a daemon.  Any currently-running
  65. # daemon is left unmolested and no new daemon is started.  Return as
  66. # with start_daemon.
  67. do_start () {
  68.     start_daemon -p ${PIDFILE} ${DAEMON} ${RRDCACHED_OPTIONS}
  69.     return $?
  70. }
  71.  
  72. # Perform a restart from a state with no daemon running.  This
  73. # function emits the success/failure diagnostics.  Return as with
  74. # restart.
  75. do_restart_diag () {
  76.     validate_prestart
  77.     if [ 0 != $? ] ; then
  78.         rv=$?
  79.     else
  80.         do_start
  81.         rv=$?
  82.         if [ 0 = $? ] ; then
  83.             log_success_msg "${NAME} restarted"
  84.         else
  85.             log_failure_msg "${NAME} restart failed"
  86.         fi
  87.     fi
  88.     return ${rv}
  89. }
  90.  
  91. # Whatever's necessary to check daemon status.  Sets PID if the daemon
  92. # is running.  Return as pidofproc.
  93. do_status () {
  94.     PID=$( pidofproc -p ${PIDFILE} ${DAEMON} )
  95.     return $?
  96. }
  97.  
  98. # Whatever's necessary to stop the daemon.  Returns as stop action.
  99. do_stop () {
  100.     killproc -p ${PIDFILE} ${DAEMON}
  101.     rv=$?
  102.     # rrdcached traps the TERM signal and does some flushing.
  103.     # Give it a chance to shut down before returning, lest
  104.     # we restart it too soon.
  105.     max_iters=${STOP_WAIT_DELAY:-5}
  106.     while [ 0 -lt ${max_iters} ] ; do
  107.         if pidofproc -p ${PIDFILE} ${DAEMON} >/dev/null ; then
  108.             log_warning_msg "${NAME} is still running"
  109.             sleep 1
  110.             max_iters=$(( ${max_iters} - 1 ))
  111.             rv=1
  112.         else
  113.             rv=0
  114.             break
  115.         fi
  116.     done
  117.     return $?
  118. }
  119.  
  120. case "$1" in
  121.     start)
  122.         # Succeed if service already started or start attempt succeeds
  123.         if do_status > /dev/null ; then
  124.             log_success_msg "${NAME} is already started as ${PID}"
  125.             RETVAL=0
  126.         else
  127.             validate_prestart
  128.             RETVAL=$?
  129.             if [ 0 = ${RETVAL} ] ; then
  130.                 do_start
  131.                 RETVAL=$?
  132.                 if [ 0 = ${RETVAL} ] ; then
  133.                     log_success_msg "${NAME} started"
  134.                 else
  135.                     log_failure_msg "${NAME} FAILED"
  136.                 fi
  137.             fi
  138.         fi
  139.         ;;
  140.     stop)
  141.         if pidofproc -p ${PIDFILE} ${DAEMON} > /dev/null ; then
  142.             do_stop
  143.             RETVAL=$?
  144.             if [ 0 = ${RETVAL} ] ; then
  145.                 log_success_msg "${NAME} has been stopped"
  146.             else
  147.                 log_failure_msg "${NAME} was not stopped"
  148.             fi
  149.         else
  150.             log_success_msg "${NAME} was already stopped"
  151.             RETVAL=0
  152.         fi
  153.         ;;
  154.     restart)
  155.         do_stop
  156.         do_restart_diag
  157.         RETVAL=$?
  158.         ;;
  159.     try-restart)
  160.         if pidofproc -p ${PIDFILE} ${DAEMON} > /dev/null ; then
  161.             do_stop
  162.             do_restart_diag
  163.             RETVAL=$?
  164.         else
  165.             # Yes, try-restart when the system is not running is
  166.             # success.
  167.             log_success_msg "${NAME} not running"
  168.             RETVAL=0
  169.         fi
  170.         ;;
  171.     reload|force-reload)
  172.         RETVAL=3
  173.         log_failure_msg "${NAME} does not support $1"
  174.         ;;
  175.     status)
  176.         do_status
  177.         RETVAL=$?
  178.         if [ 0 = "${RETVAL}" ] ; then
  179.             log_success_msg "${NAME} status ${RETVAL} is running as ${PID}"
  180.         else
  181.             log_failure_msg "${NAME} is not running"
  182.         fi
  183.         ;;
  184.     '')
  185.         log_warning_msg "No command (try: status)"
  186.         ;;
  187.     *)
  188.         log_warning_msg "Unrecognized command: $1"
  189.         ;;
  190. esac
  191.  
  192. exit $RETVAL
  193.