【问题标题】:Can not start elasticsearch as a service in ubuntu 16.04无法在 ubuntu 16.04 中将弹性搜索作为服务启动
【发布时间】:2016-12-05 02:37:14
【问题描述】:

我最近将我的机器从 Ubuntu 14.04 升级到 16.04。我面临使用elasticsearch 作为服务的问题。我installedelasticsearch使用:

sudo apt-get install elasticsearch

现在sudo service elasticsearch status 命令显示了这个结果:

elasticsearch.service - LSB: Starts elasticsearch
   Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
   Active: active (exited) since Sat 2016-07-30 18:28:13 BDT; 1h 19min ago
     Docs: man:systemd-sysv-generator(8)
 Main PID: 7988 (code=exited, status=1/FAILURE)
   CGroup: /system.slice/elasticsearch.service

Jul 30 18:28:13 dimik elasticsearch[10266]: [warning] /etc/init.d/elasticsearch: No java runtime was found
Jul 30 18:28:13 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 18:28:46 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 18:35:30 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 19:04:36 dimik systemd[1]: Started A search engine.
Jul 30 19:07:48 dimik systemd[1]: Started A search engine.
Jul 30 19:27:01 dimik systemd[1]: Started A search engine.
Jul 30 19:27:51 dimik systemd[1]: Started A search engine.
Jul 30 19:28:54 dimik systemd[1]: Started A search engine.
Jul 30 19:29:18 dimik systemd[1]: Started LSB: Starts elasticsearch.

虽然我的机器上安装了Java,我可以使用这个命令启动服务器。

sudo /usr/share/elasticsearch/bin/elasticsearch

我有点卡在这里。任何帮助将不胜感激。

编辑

为root设置JAVA_HOME后出现错误:

elasticsearch.service - LSB: Starts elasticsearch
   Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
   Active: active (exited) since Sat 2016-07-30 18:28:13 BDT; 3h 32min ago
     Docs: man:systemd-sysv-generator(8)
 Main PID: 7988 (code=exited, status=1/FAILURE)
   CGroup: /system.slice/elasticsearch.service

Jul 30 18:35:30 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 19:04:36 dimik systemd[1]: Started A search engine.
Jul 30 19:07:48 dimik systemd[1]: Started A search engine.
Jul 30 19:27:01 dimik systemd[1]: Started A search engine.
Jul 30 19:27:51 dimik systemd[1]: Started A search engine.
Jul 30 19:28:54 dimik systemd[1]: Started A search engine.
Jul 30 19:29:18 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 20:02:07 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 20:20:21 dimik systemd[1]: Started LSB: Starts elasticsearch.
Jul 30 21:59:21 dimik systemd[1]: Started LSB: Starts elasticsearch.

【问题讨论】:

  • 没有为 root 设置 javapath 之类的问题
  • Java 路径设置如我所见。 echo $JAVA_HOME 产生路径
  • 如果你也这样做 sudo echo $JAVA_HOME?
  • 没有。不是为了根。我会检查这个。谢谢你的提示。
  • 仍然没有启动。我正在编辑我的问题以在启动命令后显示输出

标签: java python elasticsearch ubuntu-16.04


【解决方案1】:

我找到了这个问题的解决方案。解决方案来自弹性网站上的这个讨论线程-Can’t start elasticsearch with Ubuntu 16.04

似乎要让 Elasticsearch 在 16.04 上运行,您必须在 /etc/default/elasticsearch 上将 START_DAEMON 设置为 true。默认情况下它会被注释掉,取消注释会使 Elasticsearch 重新启动就好了。

请务必使用systemctl restart 而不仅仅是start,因为 服务在安装后立即启动,显然有 systemd 保留的一些 socket/pidfile/something 必须释放 在能够再次启动服务之前。

【讨论】:

  • 对我们不起作用。不过,我们可以使用 /usr/share/elasticsearch/bin/elasticsearch 手动运行它。嗯。
  • Ubuntu 软件包出了点问题。即使启用了守护程序并设置了权限,它也不会通过 systemd 启动。你必须去 elastic.co 获取工作包。没有日志文件,一个空的 pid 文件,也没有 journalctl 输出,使得调试非常困难。
  • 尝试取消注释 START_DAEMON 行,进行更改后仍无法启动。手动运行它可以正常工作,但是,使用 systemctl 它不会启动、没有日志、没有进程运行等。
【解决方案2】:

问题出在日志文件上,“未找到 Java 运行时”。

Jul 30 18:28:13 dimik elasticsearch[10266]: [warning] /etc/init.d/elasticsearch: No java runtime was found

这是我解决问题的方法。

  1. 检查 elasticsearch 初始化文件

    sudo nano /etc/init.d/elasticsearch

搜索

. /usr/share/java-wrappers/java-wrappers.sh
find_java_runtime openjdk8 oracle8 openjdk7 oracle7 openjdk6 sun6 default
export JAVA_HOME
  1. 检查 java-wrappers.sh 文件

    sudo nano /usr/share/java-wrappers/java-wrappers.sh

现在您可以看到警告来自

#Displays a warning
java_warning() {
    echo "[warning] $0: $@" >&2;
}
  1. 不知何故,java 目录未在 jvm-list.sh 文件中列出

现在编辑 jvm-list.sh 文件

sudo nano /usr/lib/java-wrappers/jvm-list.sh

编辑添加您的 java 目录文件的行,在我的情况下添加 /usr/lib/jvm/java-8-oracle*

__jvm_oracle8="/usr/lib/jvm/jdk-8-oracle-* /usr/lib/jvm/jre-8-oracle-* /usr/lib/jvm/java-8-oracle*"
  1. 现在重启服务并检查elasticsearch服务

    sudo systemctl 重启弹性搜索
    sudo systemctl elasticsearch status
    curl -X GET "http://localhost:9200"

希望这会有所帮助

【讨论】:

  • 这有帮助。我不确定为什么 /usr/lib/jvm/java-8-oracle 也不在我的 jvm-list.sh 文件中,但这就是导致我的问题的原因。
  • 谢谢,有帮助
【解决方案3】:

我的问题不同,我以 root 用户身份手动启动了 elasticsearch,因此创建了一些具有错误所有权的文件,因此 elasticsearch 用户无法对其进行写入。

你可以尝试从控制台启动elasticsearch来查看错误:

sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch \
 -Des.default.config=/etc/elasticsearch/elasticsearch.yml \
 -Des.default.path.home=/usr/share/elasticsearch \
 -Des.default.path.logs=/var/log/elasticsearch \
 -Des.default.path.data=/var/lib/elasticsearch \
 -Des.default.path.work=/tmp/elasticsearch \
 -Des.default.path.conf=/etc/elasticsearch

要修复我的机器,我必须这样做:

rm -rf /var/log/elasticsearch/*
rm -rf /var/lib/elasticsearch/*

【讨论】:

  • 非常有帮助。谢谢!这应该是设置的一部分,即使没有问题,只要验证配置中的某些内容没有输入错误。
  • 这对我有用。我花了几个小时才发现一个小文件。谢谢。
  • 这对我帮助很大
【解决方案4】:
  1. 在编辑器中打开/etc/init.d/elasticsearch文件,在下面的行注释

    . /usr/share/java-wrappers/java-wrappers.sh
    find_java_runtime openjdk8 oracle8 openjdk7 oracle7 openjdk6 sun6 default
    

    像这样手动设置 JAVA_HOME:

    export JAVA_HOME="/usr"
    
  2. service elasticsearch start

【讨论】:

  • 除了要点说明之外,您还应该详细说明这将如何帮助解决问题。
  • 我已经发布了一个解决方案。您的回答没有详细说明或给出更好的选择。
  • 不。请参阅下面的 avalla 的回答。 init.d 脚本可以而且应该能够找到任何正常安装的 jvm。
猜你喜欢
  • 2016-09-10
  • 2017-08-31
  • 1970-01-01
  • 2019-10-12
  • 2020-07-15
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多