启动多个logstash脚本

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

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# 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
   
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
    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
  fi 
   
  HOME=${LS_HOME} 
  export PATH HOME 
   
  test_args="-t -f ${LS_CONF_DIR} ${LS_OPTS} " 
  $program ${test_args} 
  [ $? -eq 0 ] && return
  # Program not configured 
  return
   
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 $?

  

posted @   MR__Wang  阅读(1787)  评论(1编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示