如何保持弹性搜索在linux服务器上运行 [英] How to keep elastic search running on linux server
问题描述
您所遇到的问题是弹性搜索没有作为守护进程(服务器)启动。相反,您可以像正常的程序一样启动它。因此,当您停止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屋!