vi /etc/init.d/logstash
#!/bin/sh# Init scriptforlogstash
# Maintained by Elasticsearch
# Generated by pleaserun.
# Implemented based on LSB Core3.1:
#* Sections: 20.2, 20.3#
### BEGIN INIT INFO
# Provides: logstash
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description:
# Description: Starts Logstash as a daemon.
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATHif [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"exit1
finame=logstash
pidfile="/var/run/$name.pid"LS_USER=logstash
LS_GROUP=logstash
LS_HOME=/var/lib/logstash
LS_HEAP_SIZE="500m"LS_LOG_DIR=/var/log/logstash
LS_LOG_FILE="${LS_LOG_DIR}/$name.log"LS_CONF_DIR=/etc/logstash/conf.d
LS_OPEN_FILES=16384LS_NICE=19LS_OPTS=""[-r /etc/default/$name ] && . /etc/default/$name
[-r /etc/sysconfig/$name ] && . /etc/sysconfig/$name
program=/opt/logstash/bin/logstash
args="agent -f ${LS_CONF_DIR} -l ${LS_LOG_FILE} ${LS_OPTS}"start() {
LS_JAVA_OPTS="${LS_JAVA_OPTS} -Djava.io.tmpdir=${LS_HOME}"HOME=${LS_HOME}
export PATH HOME LS_HEAP_SIZE LS_JAVA_OPTS LS_USE_GC_LOGGING
#chown doesn't grab the suplimental groups when setting the user:group - so we have to do it for it.
# Boy, I hope we're root here.
SGROUPS=$(id -Gn "$LS_USER" | tr " " "," | sed 's/,$//'; echo '')if [ ! -z $SGROUPS ]thenEXTRA_GROUPS="--groups $SGROUPS"
fi# set ulimit as (root, presumably) first, before we drop privileges
ulimit-n ${LS_OPEN_FILES}
# Run the program!
nice -n ${LS_NICE} chroot --userspec $LS_USER:$LS_GROUP $EXTRA_GROUPS / sh -c "cd $LS_HOME
ulimit-n ${LS_OPEN_FILES}
exec \"$program\" $args">"${LS_LOG_DIR}/$name.stdout"2>"${LS_LOG_DIR}/$name.err"&
# Generate the pidfile from here. If we instead made the forked process
# generate it there will be a race condition between the pidfile writing
# and a process possibly askingforstatus.echo $! >$pidfileecho "$name started."return0}
stop() {
# Try a few times tokillTERM the programif status ; thenpid=`cat "$pidfile"`echo "Killing $name (pid $pid) with SIGTERM"
kill -TERM $pid
# Waitforit to exit.for i in 1 2 3 4 5 ; do
echo "Waiting $name (pid $pid) to die..."status||breaksleep 1
done
if status ; then
if [ "$KILL_ON_STOP_TIMEOUT" -eq 1 ] ; then
echo "Timeout reached. Killing $name (pid $pid) with SIGKILL. This may result in data loss."
kill -KILL $pidecho "$name killed with SIGKILL."
else
echo "$name stop failed; still running."
fi
else
echo "$name stopped."
fi
fi}
status() {if [ -f "$pidfile" ] ; thenpid=`cat "$pidfile"`if kill -0 $pid > /dev/null 2> /dev/null ; then# process by this pid is running.
# It may not be our pid, but that's what you get with just pidfiles.
# TODO(sissel): Check ifthis process seems to be the same as the one we
# expect. It'd be nice to use flock here, but flock uses fork, not exec,
# so it makes it quite awkward to use in this case.
return0
elsereturn2 # program is dead but pid fileexistsfi
elsereturn3# program is not runningfi}
force_stop() {if status ; thenstop
status&& kill -KILL `cat "$pidfile"`fi}case "$1" instart)
status
code=$?
if [ $code -eq 0 ]; then
echo "$name is already running"
elsestart
code=$?
fiexit $code
;;
stop) stop ;;
force-stop) force_stop ;;
status)
status
code=$?
if [ $code -eq 0 ] ; then
echo "$name is running"
else
echo "$name is not running"
fiexit $code
;;
restart)
stop&&start
;;*)echo "Usage: $SCRIPTNAME {start|stop|force-stop|status|restart}" >&2exit3;;esacexit $?
chmod +x /etc/init.d/logstash