Last active
September 30, 2015 09:43
-
-
Save celaus/f9975d5984a0b89b407b to your computer and use it in GitHub Desktop.
Sysinit script for a default debian 7 installation.
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: crate | |
# Required-Start: $network $remote_fs $named | |
# Required-Stop: $network $remote_fs $named | |
# Default-Start: 2 3 4 5 | |
# Default-Stop: 0 1 6 | |
# Short-Description: Starts and stops Crate database server. | |
# Description: Crate - The distributed database for the age of Docker | |
### END INIT INFO | |
PATH=/bin:/usr/bin:/sbin:/usr/sbin | |
NAME=crate | |
DEFAULT=/etc/default/$NAME | |
if [ `id -u` -ne 0 ]; then | |
echo "You need root privileges to run this script" | |
exit 1 | |
fi | |
. /lib/lsb/init-functions | |
if [ -r /etc/default/rcS ]; then | |
. /etc/default/rcS | |
fi | |
# if an alternative java 1.7 is available use it | |
if ! (java -version 2>&1 | grep -q "1.7") then | |
if (alternatives --display java | grep -q "1.7.0") then | |
JAVA_HOME=$(alternatives --display java | grep "1.7.0" | head -n 1 | cut -d' ' -f 1 | sed 's/bin\/java//') | |
fi | |
fi | |
CRATE_HOME=/usr/share/crate | |
CRATE_USER=crate | |
CRATE_GROUP=crate | |
DAEMON=${CRATE_HOME}/bin/crate | |
PID_FILE=${PIDFILE-/var/run/${NAME}/${NAME}.pid} | |
CRATE_PATH_PID=$(dirname ${PID_FILE}) | |
CRATE_PATH_LOG=${CRATE_PATH_LOG-/var/log/${NAME}} | |
CRATE_PATH_WORK=${CRATE_PATH_WORK-/tmp/${NAME}} | |
CRATE_PATH_CONF=${CRATE_PATH_CONF-/etc/${NAME}} | |
CRATE_CONFIG=${CRATE_CONFIG-${CRATE_PATH_CONF}/crate.yml} | |
DAEMON_OPTS="-d -p ${PID_FILE} \ | |
-Des.config=${CRATE_CONFIG} \ | |
-Des.path.conf=${CRATE_PATH_CONF} \ | |
-Des.path.home=${CRATE_HOME} \ | |
-Des.path.logs=${CRATE_PATH_LOG} \ | |
-Des.path.work=${CRATE_PATH_WORK}" | |
# These environment variables are passed over. | |
CRATE_MIN_MEM=${CRATE_MIN_MEM-256m} | |
CRATE_MAX_MEM=${CRATE_MAX_MEM-1g} | |
MAX_OPEN_FILES=65535 | |
MAX_LOCKED_MEMORY=unlimited | |
CRATE_INCLUDE=${CRATE_INCLUDE-${CRATE_HOME}/bin/crate.in.sh} | |
JAVA_OPTS=-XX:+UseCompressedOops | |
# overwrite settings from default file | |
if [ -f "$DEFAULT" ]; then | |
. "$DEFAULT" | |
fi | |
checkJava() { | |
if [ -x "$JAVA_HOME/bin/java" ]; then | |
JAVA="$JAVA_HOME/bin/java" | |
else | |
JAVA=`which java` | |
fi | |
if [ ! -x "$JAVA" ]; then | |
log_pogress_msg "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME" | |
exit 1 | |
fi | |
} | |
start() { | |
checkJava | |
log_daemon_msg $"Starting ${NAME}" | |
mkdir -p "$CRATE_PATH_WORK" "$CRATE_PATH_LOG" "$CRATE_PATH_PID" && chown "$CRATE_USER":"$CRATE_GROUP" "$CRATE_PATH_WORK" "$CRATE_PATH_LOG" "$CRATE_PATH_PID" | |
touch "$PID_FILE" && chown "$CRATE_USER":"$CRATE_GROUP" "$PID_FILE" | |
pid=`pidofproc -p "$PID_FILE" $NAME` | |
if [ -n "$pid" ] ; then | |
log_begin_msg "Already running." | |
log_end_msg 0 | |
exit 0 | |
fi | |
export CRATE_HOME | |
export CRATE_MIN_MEM | |
export CRATE_MAX_MEM | |
export JAVA_OPTS | |
export JAVA_HOME | |
start-stop-daemon --start -b --user $CRATE_USER -c $CRATE_USER --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS | |
log_end_msg $? | |
} | |
stop() { | |
log_daemon_msg $"Stopping ${NAME}" | |
if [ -f "$PID_FILE" ]; then | |
start-stop-daemon --stop --pidfile "$PID_FILE" \ | |
--user "$CRATE_USER" \ | |
--retry=TERM/20/KILL/5 >/dev/null | |
if [ $? -eq 1 ]; then | |
log_progress_msg "$NAME is not running but pid file exists, cleaning up" | |
elif [ $? -eq 3 ]; then | |
PID="`cat $PID_FILE`" | |
log_failure_msg "Failed to stop $NAME (pid $PID)" | |
exit 1 | |
fi | |
rm -f "$PID_FILE" | |
else | |
log_progress_msg "(not running)" | |
fi | |
log_end_msg 0 | |
} | |
graceful_stop() { | |
log_daemon_msg "Gracefully stopping ${NAME}" | |
start-stop-daemon --stop --pidfile "$PID_FILE" --signal USR2 | |
if [ -f "$PID_FILE" ]; then | |
start-stop-daemon --stop --pidfile "$PID_FILE" \ | |
--user "$CRATE_USER" \ | |
--signal USR2 | |
if [ $? -eq 1 ]; then | |
log_progress_msg "$NAME is not running but pid file exists, cleaning up" | |
elif [ $? -eq 3 ]; then | |
PID="`cat $PID_FILE`" | |
log_failure_msg "Failed to gracefully stop $NAME (pid $PID)" | |
exit 1 | |
fi | |
rm -f "$PID_FILE" | |
else | |
log_progress_msg "(not running)" | |
fi | |
log_end_msg 0 | |
RETVAL=$? | |
} | |
case "$1" in | |
start) | |
start | |
;; | |
stop) | |
stop | |
;; | |
graceful-stop) | |
graceful_stop | |
;; | |
status) | |
status_of_proc -p $PID_FILE $NAME $NAME && exit 0 || exit $? | |
;; | |
restart|force-reload) | |
if [ -f "$PID_FILE" ]; then | |
$0 stop | |
sleep 1 | |
fi | |
$0 start | |
;; | |
*) | |
N=/etc/init.d/${NAME} | |
log_success_msg "Usage: $N {start|stop|restart|force-reload}" >&2 | |
exit 1 | |
;; | |
esac | |
exit 0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment