启动多个logstash脚本

一台服务器上启动多个logstash脚本

# more logstash_click 
#!/bin/sh  
# Init script for logstash  
# Maintained by Elasticsearch  
# Generated by pleaserun.  
# Implemented based on LSB Core 3.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:/usr/local/logstash/bin
export PATH  
  
if [ `id -u` -ne 0 ]; then  
   echo "You need root privileges to run this script"  
   exit 1  
fi  
 
# adirname - return absolute dirname of given file
adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; }
MYNAME=`basename "$0"`
MYDIR=`adirname "$0"`
LS_LOG_DIR="${MYDIR}/logs"
LS_DATA_PATH="${MYDIR}/data"
LS_CONF_DIR="${MYDIR}/conf.d"
 
name="${MYNAME}"
  
LS_USER=elasticsearch  
LS_GROUP=elasticsearch  
LS_HOME=/usr/local/logstash  
LS_HEAP_SIZE="256m"  
#LS_LOG_DIR=/usr/local/logstash/logs 
LS_LOG_FILE="${LS_LOG_DIR}/$name.log"  
pidfile="${LS_LOG_DIR}/$name.pid"  
#LS_CONF_DIR=/usr/local/logstash/conf.d  
LS_OPEN_FILES=16384  
LS_NICE=19  
KILL_ON_STOP_TIMEOUT=${KILL_ON_STOP_TIMEOUT-0} #default value is zero to this variable but could be updated by user request  
LS_OPTS=""  
  
  
[ -r /etc/default/$name ] && . /etc/default/$name  
[ -r /etc/sysconfig/$name ] && . /etc/sysconfig/$name  
  
program=$LS_HOME/bin/logstash  
args=" -f ${LS_CONF_DIR} --path.data=${LS_DATA_PATH} -l ${LS_LOG_FILE} ${LS_OPTS}"  
  
quiet() {  
  "$@" > /dev/null 2>&1  
  return $?  
}  
  
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 LS_GC_LOG_FILE  
  
  # 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 ]  
  then  
        EXTRA_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}  
    $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 asking for status.  
  echo $! > $pidfile  
  
  echo "$name started."  
  return 0  
}  
  
stop() {  
  # Try a few times to kill TERM the program  
  if status ; then  
    pid=`cat "$pidfile"`  
    echo "Killing $name (pid $pid) with SIGTERM"  
    ps -ef |grep $pid |grep -v 'grep' |awk '{print $2}' | xargs kill -9  
    # Wait for it to exit.  
    for i in 1 2 3 4 5 6 7 8 9 ; do  
      echo "Waiting $name (pid $pid) to die..."  
      status || break  
      sleep 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 $pid  
        echo "$name killed with SIGKILL."  
      else  
        echo "$name stop failed; still running."  
        return 1 # stop timed out and not forced  
      fi  
    else  
      echo "$name stopped."  
    fi  
  fi  
}  
  
status() {  
  if [ -f "$pidfile" ] ; then  
    pid=`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 if this 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.  
      return 0  
    else  
      return 2 # program is dead but pid file exists  
    fi  
  else  
    return 3 # program is not running  
  fi  
}  
  
configtest() {  
  # Check if a config file exists  
  if [ ! "$(ls -A ${LS_CONF_DIR}/* 2> /dev/null)" ]; then  
    echo "There aren't any configuration files in ${LS_CONF_DIR}"  
    return 1  
  fi  
  
  HOME=${LS_HOME}  
  export PATH HOME  
  
  test_args="-t -f ${LS_CONF_DIR} ${LS_OPTS} "  
  $program ${test_args}  
  [ $? -eq 0 ] && return 0  
  # Program not configured  
  return 6  
}  
  
case "$1" in  
  start)  
    status  
    code=$?  
    if [ $code -eq 0 ]; then  
      echo "$name is already running"  
    else  
      start  
      code=$?  
    fi  
    exit $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"  
    fi  
    exit $code  
    ;;  
  reload) reload ;;  
  restart)  
    stop && start  
    ;;  
  check)  
    configtest  
    exit $?  
    ;;  
  *)  
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|check}" >&2  
    exit 3  
  ;;  
esac  
  
exit $? 

  

原文地址:https://www.cnblogs.com/xzlive/p/10571636.html