无法在Ubuntu 16.04上将elasticsearch作为服务启动

19

我最近将我的计算机从Ubuntu 14.04 升级到了 16.04。我在使用 elasticsearch 服务时遇到了问题。我使用以下方法进行了 安装elasticsearch

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已经安装在我的计算机上,我仍然可以使用这个命令来启动服务器。

尽管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.

看起来根目录没有设置Java路径。 - Jens
Java路径已设置,我可以看到。echo $JAVA_HOME 返回路径。 - salmanwahed
如果您执行sudo echo $JAVA_HOME呢? - Jens
不,不是为了root。我会检查这个的。谢谢你的提示。 - salmanwahed
仍然无法启动。我正在编辑我的问题以显示启动命令后的输出。 - salmanwahed
6个回答

40
我已经找到了这个问题的解决方案。解决方案来自于elastic官网上的这个讨论串-无法启动Ubuntu 16.04上的elasticsearch
引用:
看起来,在Ubuntu 16.04上运行Elasticsearch,你需要在/etc/default/elasticsearch中将START_DAEMON设置为true。默认情况下它被注释掉了,取消注释可以使Elasticsearch重新启动。
请确保使用systemctl restart而不是仅仅使用start命令,因为服务在安装后会立即启动,显然还有一些由systemd维护的socket/pidfile/something必须释放才能再次启动服务。

对我们来说不起作用。但是我们可以手动运行 /usr/share/elasticsearch/bin/elasticsearch。嗯。 - Dave Morse
Ubuntu软件包似乎出了问题。即使启用了守护进程并设置了权限,它也无法通过systemd启动。您必须前往elastic.co获取可用的软件包。没有日志文件、空的pid文件和journalctl输出为空,这使得调试非常困难。 - Jon Watte
1
尝试取消注释START_DAEMON行,但在进行更改后仍无法启动。手动运行它可以正常工作,但是使用systemctl时它不会启动,没有日志,没有进程运行等。 - slothstronaut

9
问题出现在日志文件中,“找不到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 restart elasticsearch
    sudo systemctl elasticsearch status
    curl -X GET "http://localhost:9200"

希望这能够有所帮助。


这很有帮助。我不确定为什么 /usr/lib/jvm/java-8-oracle 也没有在我的 jvm-list.sh 文件中,但这就是导致我的问题的原因。 - Nick Freitas
谢谢,那很有帮助。 - Roma Rush

4
我的问题不同,我以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/*

1
非常有帮助。谢谢!即使没有问题,这应该是设置的一部分,以验证配置中的某些内容是否输入错误。 - N6151H
1
这对我有用。花了我几个小时才发现一个小文件。谢谢。 - Paul Dawson
1
这对我帮助很大。 - Hank Phung

2
  1. Open /etc/init.d/elasticsearch file in editor, Comment below lines

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

    Set JAVA_HOME manually like so:

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


除了列出要点指示,您还应该详细说明它如何帮助解决问题。 - Balázs
我已经发布了一个解决方案。你的回答没有详细说明或提供更好的替代方案。 - salmanwahed
不是。请参见下面avalla的答案。init.d脚本应该能够找到任何正常安装的jvm。 - N6151H

0

使用以下方法删除不必要的Java包

sudo apt autoremove

然后重新安装elasticsearch并启动它:

sudo apt install elasticsearch
service elasticsearch status

0
你已经启用了该服务吗?
systemctl enable elasticsearch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接