如何保持弹性搜索在linux服务器上运行 [英] How to keep elastic search running on linux server

查看:168
本文介绍了如何保持弹性搜索在linux服务器上运行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过Putty客户端使用ssh访问我的服务器,但是当我的油灰不活动或者我关闭时弹性搜索停止。我想保持它一直运行。如何实现这个?

解决方案

您所遇到的问题是弹性搜索没有作为守护进程(服务器)启动。相反,您可以像正常的程序一样启动它。因此,当您停止SSH会话时,程序将停止运行。



为了在服务器本身重新启动时使弹性搜索启动,您需要向服务器添加弹性搜索启动。



您没有说出在服务器上运行的操作系统。我们假设它是一个Debian(例如Ubuntu)系统),您必须创建一个文件,您可以将其放在/etc/init.d目录中。



我已经复制了文件从我自己的服务器下面。你可能已经有了
查找文件/etc/init.d/elasticsearch

  $ more /etc/init.d/elasticsearch 

一旦你拥有该文件,你可以运行命令

  sudo update-rc.d elasticsearch默认值95 10 

这将安装弹性搜索作为服务。



要启动和停止服务,可以运行以下命令:

  sudo服务弹性搜索开始
sudo服务弹性搜索停止

如果您还没有,该文件在下面。

 #!/ bin / sh 

#/etc/init.d/elasticsearch - Elasticsearch的启动脚本

#由Miquel van Smoorenburg编写< miquels@cistron.nl> ;.
#修改为Debian GNU / Linux由Ian Murdock< imurdock@gnu.ai.mit.edu> ;.
#由Stefan Gybas< sgybas@debian.org>
#由Thierry Carrez< thierry.carrez@ubuntu.com>修改为Tomcat6。
#Jason Brittain< jason.brittain@mulesoft.com>
#由Nicolas Huray修改Elasticsearch< nicolas.huray@gmail.com> ;.

### BEGIN INIT INFO
#提供:elasticsearch
#必需开始:$ network $ remote_fs $ named
#必需停止:$ network $ remote_fs $ named
#默认开始:2 3 4 5
#默认停止:0 1 6
#简短描述:启动elasticsearch
#说明:使用start -stop-daemon
### END INIT INFO

PATH = / bin:/ usr / bin:/ sbin:/ usr / sbin
NAME = elasticsearch
DESC =Elasticsearch Server
DEFAULT = / etc / default / $ NAME

if [`id -u` -ne 0];然后
echo您需要root权限才能运行此脚本
exit 1
fi


。 / lib / lsb / init-functions

如果[-r / etc / default / rcS];那么
。 / etc / default / rcS
fi


#以下变量可以覆盖在$ DEFAULT

#运行Elasticsearch作为此用户标识和组ID
ES_USER = elasticsearch
ES_GROUP = elasticsearch

#第一个现有目录用于JAVA_HOME(如果$ DEFAULT中没有定义JAVA_HOME)
JDK_DIRS =/ usr / lib / jvm / java-8-oracle / /usr/lib/jvm/j2sdk1.8-oracle/ / usr / lib / jvm / jdk-7-oracle-x64 / usr / lib / jvm / oracle /usr/lib/jvm/j2sdk1.7-oracle/ / usr / lib / jvm / jav
a-7-openjdk / usr / lib / jvm / java-7-openjdk-amd64 / / usr / lib / jvm / java-7-openjdk-armhf / usr / lib / jvm / java-7-openjdk-i386 / / usr / lib / jvm / default-java

#查找正确的JVM在$ JDK_DIRS中使用
作为jdir; do
如果[-r$ jdir / bin / java-a -z$ {JAVA_HOME}];然后
JAVA_HOME =$ jdir
fi
done
export JAVA_HOME

#弹性搜索二进制分发所在的目录
ES_HOME = usr / share / $ NAME

#堆大小默认为256m min,1g max
#将ES_HEAP_SIZE设置为可用RAM的50%,但不超过31g
#ES_HEAP_SIZE = 2g

#堆新一代
#ES_HEAP_NEWSIZE =

#最大直接内存
#ES_DIRECT_SIZE =

#其他Java OPTS
#ES_JAVA_OPTS =

#最大打开文件数
MAX_OPEN_FILES = 65535

#最大锁定内存量
#MAX_LOCKED_MEMORY =

#Elasticsearch日志目录
LOG_DIR = / var / log / $ NAME

#Elasticsearch数据目录
DATA_DIR = / var / lib / $ NAME

#Elasticsearch工作目录
WORK_DIR = / tmp / $ NAME

#Elasticsearch配置目录
CONF_DIR = / etc / $ NAME

#Elasticsearch配置文件(elasticsearch.yml)
CONF_FILE = $ CONF_ DIR / elasticsearch.yml

#进程可以拥有的VMA(虚拟内存区域)的最大数量
MAX_MAP_COUNT = 262144

#可以覆盖的变量结束在$ DEFAULT

#从默认文件覆盖设置
如果[-f$ DEFAULT];那么
。 $ DEFAULT
fi

#定义其他必需变量
PID_FILE = / var / run / $ NAME.pid
DAEMON = $ ES_HOME / bin / elasticsearch
DAEMON_OPTS = - d -p $ PID_FILE --default.config = $ CONF_FILE --default.path.home = $ ES_HOME --default.path.logs = $ LOG_DIR --default.path.data = $ DATA_DIR --default.path.work = $ WORK_
DIR --default.path.conf = $ CONF_DIR

导出ES_HEAP_SIZE
导出ES_HEAP_NEWSIZE
导出ES_DIRECT_SIZE
export ES_JAVA_OPTS

#检查DAEMON是否存在
test -x $ DAEMON ||退出0

checkJava(){
如果[-x$ JAVA_HOME / bin / java];然后
JAVA =$ JAVA_HOME / bin / java
else
JAVA =`哪个java`
fi

如果[! -x$ JAVA];然后
echo找不到任何可执行的java二进制文件,请在您的PATH中安装java或设置JAVA_HOME
exit 1
fi
}


checkJava

如果[-n$ MAX_LOCKED_MEMORY-a -z$ ES_HEAP_SIZE];然后
log_failure_msgMAX_LOCKED_MEMORY设置 - ES_HEAP_SIZE也必须设置
退出1
fi

log_daemon_msg启动$ DESC

pid =`pidofproc -p $ PID_FILE elasticsearch`
if [-n$ pid];然后
log_begin_msg已经运行。
log_end_msg 0
退出0
fi

#准备环境
mkdir -p$ LOG_DIR$ DATA_DIR$ WORK_DIR&& ; chown$ ES_USER:$ ES_GROUP$ LOG_DIR$ DATA_DIR$ WORK_DIR
触摸$ PID_FILE&& chown$ ES_USER:$ ES_GROUP$ PID_FILE

如果[-n$ MAX_OPEN_FILES];那么
ulimit -n $ MAX_OPEN_FILES
fi

如果[-n$ MAX_LOCKED_MEMORY];然后
ulimit -l $ MAX_LOCKED_MEMORY
fi

如果[-n$ MAX_MAP_COUNT-a -f / proc / sys / vm / max_map_count];然后
sysctl -q -w vm.max_map_count = $ MAX_MAP_COUNT
fi

#启动守护进程
start-stop-daemon --start -b --user $ ES_USER-c$ ES_USER--pidfile$ PID_FILE--exec $ DAEMON - $ DAEMON_OPTS
return = $?
如果[$ return -eq 0]
然后
i = 0
timeout = 10
#等待进程在退出
之前正确启动,直到{cat$ PID_FILE| xargs kill -0; }> / dev / null 2& 1
do
sleep 1
i = $(($ i + 1))
[$ i -gt $ timeout]& ;&安培; log_end_msg 1
done
else
log_end_msg $ return
fi
;;
stop)
log_daemon_msg停止$ DESC

如果[-f$ PID_FILE];然后
start-stop-daemon --stop --pidfile$ PID_FILE\
--user$ ES_USER\
--retry = TERM / 20 / KILL / 5 > / dev / null
如果[$? -eq 1];然后
log_progress_msg$ DESC没有运行,但pid文件存在,清理
elif [$? -eq 3];然后
PID =`cat $ PID_FILE`
log_failure_msg无法停止$ DESC(pid $ PID)
exit 1
fi
rm -f $ PID_FILE
else
log_progress_msg(not running)
fi
log_end_msg 0
;;
status)
status_of_proc -p $ PID_FILE elasticsearch elasticsearch&&退出0 ||退出$?
;;
restart | force-reload)
如果[-f$ PID_FILE];那么
$ 0 stop
sleep 1
fi
$ 0 start
;;
*)
log_success_msg用法:$ 0 {start | stop | restart | force-reload | status}
exit 1
;;
esac

退出0


I am accessing my server using ssh via Putty client but when my putty goes inactive or I close it elastic search stops. I want to keep it running all the time. How can I achieve this?

解决方案

The issue you have is that elasticsearch is not being started as a daemon (server). Instead you starting it as you would a normal program. Therefore when you stop your SSH session, the program stops running.

In order to get elasticsearch to start when the server itself is rebooted, you need to add elasticsearch to the server startup.

You didn't say which operating system you are running on the server. Let's assume it's a Debian (eg Ubuntu) system), you must create a file that you can place in the directory /etc/init.d.

I have copied the file from my own server below. You may already have it. Look for the file /etc/init.d/elasticsearch

$ more /etc/init.d/elasticsearch 

Once you have the file you can run the command

sudo update-rc.d elasticsearch defaults 95 10

This will "install" elasticsearch as a service.

To start and stop the service, you can run the commands :

sudo  service elasticsearch start
sudo  service elasticsearch stop

The file is below if you don't have it already.

#!/bin/sh
#
# /etc/init.d/elasticsearch -- startup script for Elasticsearch
#
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian GNU/Linux by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Modified for Tomcat by Stefan Gybas <sgybas@debian.org>.
# Modified for Tomcat6 by Thierry Carrez <thierry.carrez@ubuntu.com>.
# Additional improvements by Jason Brittain <jason.brittain@mulesoft.com>.
# Modified by Nicolas Huray for Elasticsearch <nicolas.huray@gmail.com>.
#
### BEGIN INIT INFO
# Provides:          elasticsearch
# Required-Start:    $network $remote_fs $named
# Required-Stop:     $network $remote_fs $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts elasticsearch
# Description:       Starts elasticsearch using start-stop-daemon
### END INIT INFO

PATH=/bin:/usr/bin:/sbin:/usr/sbin
NAME=elasticsearch
DESC="Elasticsearch Server"
DEFAULT=/etc/default/$NAME

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


. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
    . /etc/default/rcS
fi


# The following variables can be overwritten in $DEFAULT

# Run Elasticsearch as this user ID and group ID
ES_USER=elasticsearch
ES_GROUP=elasticsearch

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not defined in $DEFAULT)
JDK_DIRS="/usr/lib/jvm/java-8-oracle/ /usr/lib/jvm/j2sdk1.8-oracle/ /usr/lib/jvm/jdk-7-oracle-x64 /usr/lib/jvm/java-7-oracle /usr/lib/jvm/j2sdk1.7-oracle/ /usr/lib/jvm/jav
a-7-openjdk /usr/lib/jvm/java-7-openjdk-amd64/ /usr/lib/jvm/java-7-openjdk-armhf /usr/lib/jvm/java-7-openjdk-i386/ /usr/lib/jvm/default-java"

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
    if [ -r "$jdir/bin/java" -a -z "${JAVA_HOME}" ]; then
        JAVA_HOME="$jdir"
    fi
done
export JAVA_HOME

# Directory where the Elasticsearch binary distribution resides
ES_HOME=/usr/share/$NAME

# Heap size defaults to 256m min, 1g max
# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
#ES_HEAP_SIZE=2g

# Heap new generation
#ES_HEAP_NEWSIZE=

# max direct memory
#ES_DIRECT_SIZE=

# Additional Java OPTS
#ES_JAVA_OPTS=

# Maximum number of open files
MAX_OPEN_FILES=65535

# Maximum amount of locked memory
#MAX_LOCKED_MEMORY=

# Elasticsearch log directory
LOG_DIR=/var/log/$NAME

# Elasticsearch data directory
DATA_DIR=/var/lib/$NAME

# Elasticsearch work directory
WORK_DIR=/tmp/$NAME

# Elasticsearch configuration directory
CONF_DIR=/etc/$NAME

# Elasticsearch configuration file (elasticsearch.yml)
CONF_FILE=$CONF_DIR/elasticsearch.yml

# Maximum number of VMA (Virtual Memory Areas) a process can own
MAX_MAP_COUNT=262144

# End of variables that can be overwritten in $DEFAULT

# overwrite settings from default file
if [ -f "$DEFAULT" ]; then
    . "$DEFAULT"
fi

# Define other required variables
PID_FILE=/var/run/$NAME.pid
DAEMON=$ES_HOME/bin/elasticsearch
DAEMON_OPTS="-d -p $PID_FILE --default.config=$CONF_FILE --default.path.home=$ES_HOME --default.path.logs=$LOG_DIR --default.path.data=$DATA_DIR --default.path.work=$WORK_
DIR --default.path.conf=$CONF_DIR"

export ES_HEAP_SIZE
export ES_HEAP_NEWSIZE
export ES_DIRECT_SIZE
export ES_JAVA_OPTS

# Check DAEMON exists
test -x $DAEMON || exit 0

checkJava() {
    if [ -x "$JAVA_HOME/bin/java" ]; then
        JAVA="$JAVA_HOME/bin/java"
    else
        JAVA=`which java`
    fi

    if [ ! -x "$JAVA" ]; then
        echo "Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME"
        exit 1
    fi
}

case "$1" in
  start)
    checkJava

    if [ -n "$MAX_LOCKED_MEMORY" -a -z "$ES_HEAP_SIZE" ]; then
        log_failure_msg "MAX_LOCKED_MEMORY is set - ES_HEAP_SIZE must also be set"
        exit 1
    fi

    log_daemon_msg "Starting $DESC"

    pid=`pidofproc -p $PID_FILE elasticsearch`
    if [ -n "$pid" ] ; then
        log_begin_msg "Already running."
        log_end_msg 0
        exit 0
    fi

    # Prepare environment
    mkdir -p "$LOG_DIR" "$DATA_DIR" "$WORK_DIR" && chown "$ES_USER":"$ES_GROUP" "$LOG_DIR" "$DATA_DIR" "$WORK_DIR"
    touch "$PID_FILE" && chown "$ES_USER":"$ES_GROUP" "$PID_FILE"

    if [ -n "$MAX_OPEN_FILES" ]; then
        ulimit -n $MAX_OPEN_FILES
    fi

    if [ -n "$MAX_LOCKED_MEMORY" ]; then
        ulimit -l $MAX_LOCKED_MEMORY
    fi

    if [ -n "$MAX_MAP_COUNT" -a -f /proc/sys/vm/max_map_count ]; then
        sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT
    fi

    # Start Daemon
    start-stop-daemon --start -b --user "$ES_USER" -c "$ES_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
    return=$?
    if [ $return -eq 0 ]
    then
        i=0
        timeout=10
        # Wait for the process to be properly started before exiting
        until { cat "$PID_FILE" | xargs kill -0; } >/dev/null 2>&1
        do
            sleep 1
            i=$(($i + 1))
            [ $i -gt $timeout ] && log_end_msg 1
        done
    else
        log_end_msg $return
    fi
    ;;      
  stop)
    log_daemon_msg "Stopping $DESC"

    if [ -f "$PID_FILE" ]; then 
        start-stop-daemon --stop --pidfile "$PID_FILE" \
            --user "$ES_USER" \
            --retry=TERM/20/KILL/5 >/dev/null
        if [ $? -eq 1 ]; then
            log_progress_msg "$DESC is not running but pid file exists, cleaning up"
        elif [ $? -eq 3 ]; then
            PID="`cat $PID_FILE`"
            log_failure_msg "Failed to stop $DESC (pid $PID)"
            exit 1
        fi
        rm -f "$PID_FILE"
    else
        log_progress_msg "(not running)"
    fi
    log_end_msg 0
    ;;
  status)
    status_of_proc -p $PID_FILE elasticsearch elasticsearch && exit 0 || exit $?
    ;;
  restart|force-reload)
    if [ -f "$PID_FILE" ]; then
        $0 stop
        sleep 1
    fi
    $0 start
    ;;
  *)
    log_success_msg "Usage: $0 {start|stop|restart|force-reload|status}"
    exit 1
    ;;
esac

exit 0

这篇关于如何保持弹性搜索在linux服务器上运行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆