134 lines
3.1 KiB
Bash
134 lines
3.1 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
CMD=$1
|
|
NOHUP=${NOHUP:=$(which nohup)}
|
|
PS=${PS:=$(which ps)}
|
|
|
|
# default java
|
|
JAVA_CMD=${JAVA_CMD:=$(which java)}
|
|
|
|
get_pid() {
|
|
cat "${GRAYLOG_PID}" 2> /dev/null
|
|
}
|
|
|
|
pid_running() {
|
|
kill -0 $1 2> /dev/null
|
|
}
|
|
|
|
die() {
|
|
echo $*
|
|
exit 1
|
|
}
|
|
|
|
if [ -n "$JAVA_HOME" ]
|
|
then
|
|
# try to use $JAVA_HOME
|
|
if [ -x "$JAVA_HOME"/bin/java ]
|
|
then
|
|
JAVA_CMD="$JAVA_HOME"/bin/java
|
|
else
|
|
die "$JAVA_HOME"/bin/java is not executable
|
|
fi
|
|
fi
|
|
|
|
# resolve links - $0 may be a softlink
|
|
GRAYLOGCTL="$0"
|
|
|
|
while [ -h "$GRAYLOGCTL" ]; do
|
|
ls=$(ls -ld "$GRAYLOGCTL")
|
|
link=$(expr "$ls" : '.*-> \(.*\)$')
|
|
if expr "$link" : '/.*' > /dev/null; then
|
|
GRAYLOGCTL="$link"
|
|
else
|
|
GRAYLOGCTL=$(dirname "$GRAYLOGCTL")/"$link"
|
|
fi
|
|
done
|
|
|
|
# take variables from environment if set
|
|
GRAYLOGCTL_DIR=${GRAYLOGCTL_DIR:=$(dirname "$GRAYLOGCTL")}
|
|
GRAYLOG_SERVER_JAR=${GRAYLOG_SERVER_JAR:=graylog.jar}
|
|
GRAYLOG_CONF=${GRAYLOG_CONF:=/etc/graylog/server/server.conf}
|
|
GRAYLOG_PID=${GRAYLOG_PID:=/tmp/graylog.pid}
|
|
LOG_FILE=${LOG_FILE:=log/graylog-server.log}
|
|
LOG4J=${LOG4J:=}
|
|
DEFAULT_JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Dlog4j2.formatMsgNoLookups=true -Djdk.tls.acknowledgeCloseNotify=true -Xms1g -Xmx1g -XX:NewRatio=1 -server -XX:+ResizeTLAB -XX:-OmitStackTraceInFastThrow"
|
|
if $JAVA_CMD -XX:+PrintFlagsFinal 2>&1 |grep -q UseParNewGC; then
|
|
DEFAULT_JAVA_OPTS="${DEFAULT_JAVA_OPTS} -XX:+UseParNewGC"
|
|
fi
|
|
if $JAVA_CMD -XX:+PrintFlagsFinal 2>&1 |grep -q UseConcMarkSweepGC; then
|
|
DEFAULT_JAVA_OPTS="${DEFAULT_JAVA_OPTS} -XX:+UseConcMarkSweepGC -XX:+CMSConcurrentMTEnabled -XX:+CMSClassUnloadingEnabled"
|
|
fi
|
|
|
|
JAVA_OPTS="${JAVA_OPTS:="$DEFAULT_JAVA_OPTS"}"
|
|
|
|
start() {
|
|
echo "Starting graylog-server ..."
|
|
cd "$GRAYLOGCTL_DIR/.."
|
|
"${NOHUP}" "${JAVA_CMD}" ${JAVA_OPTS} ${LOG4J} -jar "${GRAYLOG_SERVER_JAR}" server -f "${GRAYLOG_CONF}" -p "${GRAYLOG_PID}" >> "${LOG_FILE}" 2>> "${LOG_FILE}" &
|
|
}
|
|
|
|
run() {
|
|
echo "Running graylog-server ..."
|
|
cd "$GRAYLOGCTL_DIR/.."
|
|
exec "${JAVA_CMD}" ${JAVA_OPTS} ${LOG4J} -jar "${GRAYLOG_SERVER_JAR}" server -f "${GRAYLOG_CONF}" -p "${GRAYLOG_PID}"
|
|
}
|
|
|
|
stop() {
|
|
if [ ! -f "${GRAYLOG_PID}" ]; then
|
|
die "Not stopping. PID file not found: ${GRAYLOG_PID}"
|
|
fi
|
|
|
|
PID=$(get_pid)
|
|
|
|
echo "Stopping graylog-server ($PID) ..."
|
|
echo "Waiting for graylog-server to halt."
|
|
|
|
kill $PID
|
|
|
|
while "$PS" -p $PID > /dev/null; do sleep 1; done;
|
|
rm -f "${GRAYLOG_PID}"
|
|
|
|
echo "graylog-server stopped"
|
|
}
|
|
|
|
restart() {
|
|
echo "Restarting graylog-server ..."
|
|
stop
|
|
start
|
|
}
|
|
|
|
status() {
|
|
PID=$(get_pid)
|
|
if [ ! -z $PID ]; then
|
|
if pid_running $PID; then
|
|
echo "graylog-server running with PID ${PID}"
|
|
return 0
|
|
else
|
|
rm "${GRAYLOG_PID}"
|
|
die "Removed stale PID file ${GRAYLOG_PID} with ${PID}."
|
|
fi
|
|
fi
|
|
|
|
die "graylog-server not running"
|
|
}
|
|
|
|
case "$CMD" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
restart
|
|
;;
|
|
status)
|
|
status
|
|
;;
|
|
run)
|
|
run
|
|
;;
|
|
*)
|
|
echo "Usage $0 {start|stop|restart|status|run}"
|
|
esac
|