zoukankan      html  css  js  c++  java
  • logstash服务启动脚本

    logstash服务启动脚本

    最近在弄ELK,发现logstash没有sysv类型的服务启动脚本,于是按照网上一个老外提供的模板自己进行修改

    #添加用户
    useradd logstash -M -s /sbin/nologin
    mkdir /var/log/logstash/
    chown -R logstash:logstash /var/log/logstash/
    chown -R logstash:logstash /usr/local/logstash-2.0.0/

    vi /etc/init.d/logstash
    #!/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
    export PATH

    if [ `id -u` -ne 0 ]; then
    echo "You need root privileges to run this script"
    exit 1
    fi

    name=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=16384
    LS_NICE=19
    LS_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 ]
    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}
    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 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"
    kill -TERM $pid
    # Wait for it to exit.
    for i in 1 2 3 4 5 ; 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."
    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
    }

    force_stop() {
    if status ; then
    stop
    status && kill -KILL `cat "$pidfile"`
    fi
    }


    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
    ;;
    restart)

    stop && start
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|force-stop|status|restart}" >&2
    exit 3
    ;;
    esac

    exit $?


    chmod +x /etc/init.d/logstash
    #设置开机启动
    chkconfig --add logstash
    chkconfig logstash on

    如有不对的地方,欢迎大家拍砖o(∩_∩)o 

    本文版权归作者所有,未经作者同意不得转载。

  • 相关阅读:
    c# 移动winform窗体
    C# 通过反射动态创建对象的方法
    C# listView用法
    C# PropertyGrid总结
    C# 静态或动态调用C++动态链接库dll
    C# 加载C++创建的动态链接库dll
    C# 动态加载dll(.net)示例
    C# 关于泛型
    C# 中的指针使用
    C/S与B/S的区别
  • 原文地址:https://www.cnblogs.com/lyhabc/p/5871295.html
Copyright © 2011-2022 走看看