Last active
December 12, 2015 01:18
-
-
Save Slach/4689929 to your computer and use it in GitHub Desktop.
graphite megacarbon init.d script for Debian, see http://blog.sweetiq.com/2013/01/carbon-daemon-writer-setup-in-megacarbon/ for more details
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
### BEGIN INIT INFO | |
# Provides: carbon-daemon | |
# Required-Start: $remote_fs | |
# Required-Stop: $remote_fs | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Graphite backend daemon | |
# Description: backend data caching and persistence daemon for Graphite | |
### END INIT INFO | |
# sudo cp -v carbon-daemon /etc/init.d/carbon-daemon | |
# Author: Ilya Zakreuski <[email protected]> | |
# Rewrited for megacarbon carbon-daemon: Eugene Klimov <[email protected]> | |
PATH=/sbin:/usr/sbin:/bin:/usr/bin | |
DESC="Graphite backend daemon" | |
NAME=carbon-daemon | |
GRAPHITE_DIR=/opt/graphite | |
DAEMON=$GRAPHITE_DIR/bin/$NAME.py | |
PIDFILE=/var/run/$NAME/$NAME.pid | |
SCRIPTNAME=/etc/init.d/$NAME | |
export GRAPHITE_DIR=$GRAPHITE_DIR | |
# Exit if the package is not installed | |
[ -x "$DAEMON" ] || exit 0 | |
# Read configuration variable file if it is present | |
[ -r /etc/default/$NAME ] && . /etc/default/$NAME | |
DAEMON_ARGS="" | |
# Load the VERBOSE setting and other rcS variables | |
. /lib/init/vars.sh | |
VERBOSE=on | |
# Define LSB log_* functions. | |
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. | |
. /lib/lsb/init-functions | |
# Create carbon-cache dir in /var/run if does not exist | |
[ -d "/var/run/$NAME" ] || mkdir /var/run/$NAME \ | |
&& chown www-data:www-data /var/run/$NAME | |
# Create log dir in /var/log if does not exist | |
[ -d "/var/log/carbon" ] || mkdir /var/log/carbon \ | |
&& chown www-data:www-data /var/log/carbon | |
# | |
# Function that starts the daemon/service | |
# | |
do_start() | |
{ | |
# Return | |
# 0 if daemon has been started | |
# 1 if daemon was already running | |
# 2 if daemon could not be started | |
start-stop-daemon --start --startas $NAME --pidfile $PIDFILE --test > /dev/null || return 1 | |
start-stop-daemon --start --exec $DAEMON --name $NAME --chuid www-data -- --pidfile $PIDFILE writer start || return 2 | |
} | |
# | |
# Function that stops the daemon/service | |
# | |
do_stop() | |
{ | |
# Return | |
# 0 if daemon has been stopped | |
# 1 if daemon was already stopped | |
# 2 if daemon could not be stopped | |
# other if a failure occurred | |
start-stop-daemon --stop --retry=TERM/10/KILL/5 --pidfile $PIDFILE | |
RETVAL="$?" | |
[ "$RETVAL" = 2 ] && return 2 | |
# Wait for children to finish too if this is a daemon that forks | |
start-stop-daemon --quiet --stop --oknodo --retry=0/10/KILL/5 --pidfile $PIDFILE | |
[ "$?" = 2 ] && return 2 | |
# Many daemons don't delete their pidfiles when they exit. | |
rm -f $PIDFILE | |
return "$RETVAL" | |
} | |
# | |
# Function that sends a SIGHUP to the daemon/service | |
# | |
do_reload() { | |
start-stop-daemon --stop --signal 1 --pidfile $PIDFILE --name $NAME | |
return 0 | |
} | |
case "$1" in | |
start) | |
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" | |
do_start | |
case "$?" in | |
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | |
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | |
esac | |
;; | |
stop) | |
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; | |
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; | |
esac | |
;; | |
status) | |
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? | |
;; | |
reload|force-reload) | |
log_daemon_msg "Reloading $DESC" "$NAME" | |
do_reload | |
log_end_msg $? | |
;; | |
restart) | |
log_daemon_msg "Restarting $DESC" "$NAME" | |
do_stop | |
case "$?" in | |
0|1) | |
do_start | |
case "$?" in | |
0) log_end_msg 0 ;; | |
1) log_end_msg 1 ;; # Old process is still running | |
*) log_end_msg 1 ;; # Failed to start | |
esac | |
;; | |
*) | |
# Failed to stop | |
log_end_msg 1 | |
;; | |
esac | |
;; | |
*) | |
echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2 | |
exit 3 | |
;; | |
esac | |
: |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment