java 无法在 ubuntu 16.04 中将 elasticsearch 作为服务启动

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38674711/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-03 03:39:10  来源:igfitidea点击:

Can not start elasticsearch as a service in ubuntu 16.04

javapythonelasticsearchubuntu-16.04

提问by salmanwahed

I have recently upgraded my machine from Ubuntu 14.04to 16.04. I am facing problem of using the elasticsearchas a service. I installedelasticsearchusing:

我最近将我的机器从 Ubuntu 升级14.0416.04. 我面临着使用elasticsearch服务的问题。我安装elasticsearch使用:

sudo apt-get install elasticsearch

Now sudo service elasticsearch statuscommand shows me this result:

现在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.

Although Java is installed in my machine and I can start the server using this command.

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

sudo /usr/share/elasticsearch/bin/elasticsearch

I am kind of stuck here. Any help will be appreciated.

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

Edit

编辑

After setting up JAVA_HOMEfor root the error:

JAVA_HOME为root设置后出现错误:

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.

回答by salmanwahed

I found the solution for this issue. The solution comes from this discussion thread- Can't start elasticsearch with Ubuntu 16.04on elastic's website.

我找到了这个问题的解决方案。解决方案来自此讨论线程 -无法在 elastic 网站上使用 Ubuntu 16.04 启动 elasticsearch

It seems that to get Elasticsearch to run on 16.04you have to set START_DAEMONto true on /etc/default/elasticsearch. It comes commented out by default, and uncommenting it makes Elasticsearch start again just fine.

Be sure to use systemctl restartinstead of just startbecause the service is started right after installation, and apparently there's some socket/pidfile/somethingthat systemdkeeps that must be released before being able to start the service again.

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

一定要使用systemctl restart,而不是仅仅start因为服务是正确安装后启动,而且显然有一些socket/pidfile/somethingsystemd保持必须能够再次启动该服务之前发布。

回答by Yugo Gautomo

The problem lies on log files, "No java runtime was found."

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

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

Here's my solution to the problem.

这是我对问题的解决方案。

  1. Check elasticsearch init file

    sudo nano /etc/init.d/elasticsearch

  1. 检查elasticsearch init文件

    须藤纳米 /etc/init.d/elasticsearch

search for

搜索

. /usr/share/java-wrappers/java-wrappers.sh
find_java_runtime openjdk8 oracle8 openjdk7 oracle7 openjdk6 sun6 default
export JAVA_HOME
  1. Check java-wrappers.sh file

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

  1. 检查 java-wrappers.sh 文件

    须藤纳米/usr/share/java-wrappers/java-wrappers.sh

Now you could see the warning comes from

现在你可以看到警告来自

#Displays a warning
java_warning() {
    echo "[warning] 
sudo nano /usr/lib/java-wrappers/jvm-list.sh
: $@" >&2; }
  1. Somehow, java directories are not listed in jvm-list.sh files
  1. 不知何故,java 目录未在 jvm-list.sh 文件中列出

Now edit the jvm-list.sh file

现在编辑 jvm-list.sh 文件

__jvm_oracle8="/usr/lib/jvm/jdk-8-oracle-* /usr/lib/jvm/jre-8-oracle-* /usr/lib/jvm/java-8-oracle*"

Edit the line add your java directories files, in my case add /usr/lib/jvm/java-8-oracle*

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

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
  1. Now restart the service and check elasticsearch services

    sudo systemctl restart elasticsearch
    sudo systemctl elasticsearch status
    curl -X GET "http://localhost:9200"

  1. 现在重启服务并检查elasticsearch服务

    sudo systemctl restart elasticsearch
    sudo systemctl elasticsearch status
    curl -X GET " http://localhost:9200"

Hopes this would help

希望这会有所帮助

回答by avalla

My problem was different, I started elasticsearch manually as root user, so some files were created with wrong ownership, so elasticsearch user cannot write on them.

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

You can try to start elasticsearch from console to see errors:

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

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

To fix on my machine I had to do:

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

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

回答by Vishwas Samant

  1. Open /etc/init.d/elasticsearchfile in editor, Comment below lines

    export JAVA_HOME="/usr"
    

    Set JAVA_HOME manually like so:

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

  1. /etc/init.d/elasticsearch在编辑器中打开文件,在下面几行注释

    export JAVA_HOME="/usr"
    

    像这样手动设置 JAVA_HOME:

    ##代码##
  2. service elasticsearch start