| #! /bin/sh |
| ### BEGIN INIT INFO |
| # Provides: cassandra |
| # Required-Start: $remote_fs $network $named $time |
| # Required-Stop: $remote_fs $network $named $time |
| # Should-Start: ntp mdadm |
| # Should-Stop: ntp mdadm |
| # Default-Start: 2 3 4 5 |
| # Default-Stop: 0 1 6 |
| # Short-Description: distributed storage system for structured data |
| # Description: Cassandra is a distributed (peer-to-peer) system for |
| # the management and storage of structured data. |
| ### END INIT INFO |
| |
| # Author: Eric Evans <eevans@racklabs.com> |
| |
| DESC="Cassandra" |
| NAME=cassandra |
| PIDFILE=/var/run/$NAME/$NAME.pid |
| SCRIPTNAME=/etc/init.d/$NAME |
| CONFDIR=/etc/cassandra |
| JSVC=/usr/bin/jsvc |
| WAIT_FOR_START=10 |
| CASSANDRA_HOME=/usr/share/cassandra |
| FD_LIMIT=100000 |
| |
| [ -e /usr/share/cassandra/apache-cassandra.jar ] || exit 0 |
| [ -e /etc/cassandra/cassandra.yaml ] || exit 0 |
| [ -e /etc/cassandra/cassandra-env.sh ] || exit 0 |
| |
| # Read configuration variable file if it is present |
| [ -r /etc/default/$NAME ] && . /etc/default/$NAME |
| |
| # Read Cassandra environment file. |
| . /etc/cassandra/cassandra-env.sh |
| |
| if [ -z "$JVM_OPTS" ]; then |
| echo "Initialization failed; \$JVM_OPTS not set!" >&2 |
| exit 3 |
| fi |
| |
| # Add JNA to EXTRA_CLASSPATH |
| export EXTRA_CLASSPATH="/usr/share/java/jna.jar:$EXTRA_CLASSPATH" |
| |
| # Export JAVA_HOME, if set. |
| [ -n "$JAVA_HOME" ] && export JAVA_HOME |
| |
| # Load the VERBOSE setting and other rcS variables |
| . /lib/init/vars.sh |
| |
| # Define LSB log_* functions. |
| # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. |
| . /lib/lsb/init-functions |
| |
| # |
| # Function that returns 0 if process is running, or nonzero if not. |
| # |
| # The nonzero value is 3 if the process is simply not running, and 1 if the |
| # process is not running but the pidfile exists (to match the exit codes for |
| # the "status" command; see LSB core spec 3.1, section 20.2) |
| # |
| CMD_PATT="cassandra.+CassandraDaemon" |
| is_running() |
| { |
| if [ -f $PIDFILE ]; then |
| pid=`cat $PIDFILE` |
| grep -Eq "$CMD_PATT" "/proc/$pid/cmdline" 2>/dev/null && return 0 |
| return 1 |
| fi |
| return 3 |
| } |
| |
| # |
| # 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 |
| |
| ulimit -l unlimited |
| ulimit -n "$FD_LIMIT" |
| |
| cassandra_home=`getent passwd cassandra | awk -F ':' '{ print $6; }'` |
| heap_dump_f="$cassandra_home/java_`date +%s`.hprof" |
| error_log_f="$cassandra_home/hs_err_`date +%s`.log" |
| |
| [ -e `dirname "$PIDFILE"` ] || \ |
| install -d -ocassandra -gcassandra -m750 `dirname $PIDFILE` |
| |
| |
| |
| start-stop-daemon -S -c cassandra -a /usr/sbin/cassandra -q -p "$PIDFILE" -t >/dev/null || return 1 |
| |
| start-stop-daemon -S -c cassandra -a /usr/sbin/cassandra -b -p "$PIDFILE" -- \ |
| -p "$PIDFILE" -H "$heap_dump_f" -E "$error_log_f" >/dev/null || 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 -K -p "$PIDFILE" -R TERM/30/KILL/5 >/dev/null |
| RET=$? |
| rm -f "$PIDFILE" |
| return $RET |
| } |
| |
| 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 |
| ;; |
| restart|force-reload) |
| 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 |
| ;; |
| status) |
| is_running |
| stat=$? |
| case "$stat" in |
| 0) log_success_msg "$DESC is running" ;; |
| 1) log_failure_msg "could not access pidfile for $DESC" ;; |
| *) log_success_msg "$DESC is not running" ;; |
| esac |
| exit "$stat" |
| ;; |
| *) |
| echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2 |
| exit 3 |
| ;; |
| esac |
| |
| : |
| |
| # vi:ai sw=4 ts=4 tw=0 et |