当前位置: 首页 > 面试题库 >

为什么在Ubuntu 16.04上手动启动Elasticsearch但不将其作为服务启动?

袁翰池
2023-03-14
问题内容

我在运行Ubuntu 16.04 LTS的ARM Odroid XU4上安装了ELasticsearch 6和JDK 1.8.0_161。没有错误。

当我尝试将Elasticsearch作为服务启动时,无法在端口9200上连接到localhost,并且服务状态显示为:

~ $ > sudo service elasticsearch status
● elasticsearch.service - LSB: Starts elasticsearch
   Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
   Active: active (exited) since Mon 2018-01-22 10:43:18 UTC; 9min ago
     Docs: man:systemd-sysv-generator(8)

Jan 22 10:43:18 lego systemd[1]: Starting LSB: Starts elasticsearch...
Jan 22 10:43:18 lego systemd[1]: Started LSB: Starts elasticsearch.
Jan 22 10:44:07 lego systemd[1]: Started LSB: Starts elasticsearch.

没有日志。不知道在哪里看。nofile限制在中设置为65536 /etc/security/limits.conf。我不知道在其他地方可以找到诊断信息。

虽然,当我通过手动启动Elasticsearch时sudo /usr/shared/elasticsearch/bin/elasticsearch,它可以按预期工作:

~ $ > sudo /usr/share/elasticsearch/bin/elasticsearch
[2018-01-22 10:55:55,944][WARN ][bootstrap                ] jvm uses the client vm, make sure to run `java` with the server vm for best performance by adding `-server` to the command line
[2018-01-22 10:55:56,073][INFO ][node                     ] [Ariel] version[1.7.3], pid[1126], build[NA/NA]
[2018-01-22 10:55:56,074][INFO ][node                     ] [Ariel] initializing ...
[2018-01-22 10:55:56,521][INFO ][plugins                  ] [Ariel] loaded [], sites []
[2018-01-22 10:55:56,638][INFO ][env                      ] [Ariel] using [1] data paths, mounts [[/ (/dev/mmcblk0p2)]], net usable_space 
[54.4gb], net total_space [57.2gb], types [ext4]
[2018-01-22 10:56:01,853][INFO ][node                     ] [Ariel] initialized
[2018-01-22 10:56:01,854][INFO ][node                     ] [Ariel] starting ...
[2018-01-22 10:56:02,080][INFO ][transport                ] [Ariel] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.0.103:9300]}
[2018-01-22 10:56:02,125][INFO ][discovery                ] [Ariel] elasticsearch/FtFOljAORnevIAOAFabptg
[2018-01-22 10:56:05,933][INFO ][cluster.service          ] [Ariel] new_master [Ariel][FtFOljAORnevIAOAFabptg][lego]
[inet[/192.168.0.103:9300]], reason: zen-disco-join (elected_as_master)
[2018-01-22 10:56:05,987][INFO ][http                     ] [Ariel] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.0.103:9200]}
[2018-01-22 10:56:05,988][INFO ][node                     ] [Ariel] started
[2018-01-22 10:56:06,014][INFO ][gateway                  ] [Ariel] 
recovered [0] indices into cluster_state
我缺少什么重要的步骤?我在这里关注了所有内容: https
// www.elastic.co/guide/zh-
CN/elasticsearch/reference/current/deb.html

编辑:我尝试设置START_DAEMON=true/etc/default/elasticsearch,这确实
重要,但是也没有成功。深入研究内部设置的值/etc/default/elasticsearch,我发现了这个问题。有关完整解决方案的完整细分,请参阅我的最终答案。


问题答案:

正如@Suaro指出的那样:我们的问题与该问题中所讨论的[问题具有几乎相同的症状,并且该线程在第一个链接中重申了START_DAEMON解决方案。这是一个好的开始,但是对我而言,它没有提供全面的解决方案。我仔细研究了权限,堆大小和所有权,以找到最终解决方案。

这些是按照截至2018年1月的Elasticsearch
debian安装说明
在Ubuntu
16.04上安装Elasticsearch 6的步骤:

  1. 设置START_DAEMON=true/etc/default/elasticsearch并重新启动服务。
  2. 如果系统有2GB RAM(在我的情况下为true),请设置 ES_HEAP_SIZE=1g
  3. 在中检查elasticsearch目录的权限/usr/share/elasticsearchroot拥有这些的机会 不大理想如果您还不了解,那么以root用户身份运行任何服务都会使您的基础架构受到攻击者的利用。
  4. 在#3的诱惑是设置ES_USER=rootES_GROUP=root这将解决您的问题。Elasticsearch将作为一项服务启动(即使他们的产品文档声称ES不会以形式运行root)。 不要那样做。
  5. 相反,请检查该elasticsearch用户是否在本地,以及是否存在相同名称的组。

    $ cut -d: -f1 /etc/passwd
    

    $ cut -d: -f1 /etc/group

  6. 然后,将所有elasticsearch文件夹和资源的所有权更改为elasticsearch用户和组。

    $ ~ $ > ll /usr/share/elasticsearch/
    

    total 8.0K
    drwxr-xr-x 2 elasticsearch 4.0K Jan 22 10:02 bin/
    lrwxrwxrwx 1 elasticsearch 18 Dec 24 2015 config -> /etc/elasticsearch/
    lrwxrwxrwx 1 elasticsearch 22 Dec 24 2015 data -> /var/lib/elasticsearch/
    lrwxrwxrwx 1 elasticsearch 22 Dec 24 2015 logs -> /var/log/elasticsearch/
    drwxr-xr-x 2 elasticsearch 4.0K Dec 24 2015 plugins/

    $ sudo chown -R elasticsearch:elasticsearch /usr/share/elasticsearch
    $ sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch/
    $ sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
    $ sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

  7. 然后,设置的值ES_USER=elasticsearch,并ES_GROUP=elasticsearch/etc/default/elasticsearch如果他们没有设置已经这样(如果你的诱惑,得出每#4)。

  8. 再试一次…

    ~ $ > sudo service elasticsearch status
    

    ● elasticsearch.service - LSB: Starts elasticsearch
    Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
    Active: active (exited) since Mon 2018-01-22 20:51:29 UTC; 2min 25s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 3133 ExecStop=/etc/init.d/elasticsearch stop (code=exited, status=0/SUCCESS)
    Process: 3209 ExecStart=/etc/init.d/elasticsearch start (code=exited, status=0/SUCCESS)

    ~ $ > sudo systemctl restart elasticsearch.service

    ~ $ > sudo service elasticsearch status
    ● elasticsearch.service - LSB: Starts elasticsearch
    Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
    Active: active (running) since Mon 2018-01-22 20:54:05 UTC; 2s ago
    Docs: man:systemd-sysv-generator(8)
    Process: 3306 ExecStop=/etc/init.d/elasticsearch stop (code=exited, status=0/SUCCESS)
    Process: 3340 ExecStart=/etc/init.d/elasticsearch start (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/elasticsearch.service
    └─3391 /usr/lib/jvm/java-8-openjdk-armhf/bin/java -Xms1g -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Delasticsearch -Des.pidfil

    Jan 22 20:54:04 lego systemd[1]: Starting LSB: Starts elasticsearch…
    Jan 22 20:54:05 lego elasticsearch[3340]: * Starting Elasticsearch Server
    Jan 22 20:54:05 lego elasticsearch[3340]: …done.
    Jan 22 20:54:05 lego systemd[1]: Started LSB: Starts elasticsearch.
    Jan 22 20:51:29 lego systemd[1]: Starting LSB: Starts elasticsearch…

维奥拉!

~ $ > curl -XGET 'localhost:9200/?pretty'
{
  "status" : 200,
  "name" : "Svarog",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "1.7.3",
    "build_hash" : "NA",
    "build_timestamp" : "NA",
    "build_snapshot" : false,
    "lucene_version" : "4.10.4"
  },
  "tagline" : "You Know, for Search"
}


 类似资料:
  • 我已经在CentOS虚拟机上安装了Tomcat(apache-Tomcat-8.5.37)(使用bento/CentOS-7)。 Tomcat安装在 Java8安装在 在安装Tomcat之前,我已经用这种方式创建了一个Tomcat用户 如果我尝试手动启动Tomcat,请使用 一切都很好,我可以从url测试Tomcat广告的示例 (注意:192.168.33.10是我的虚拟机的IP…) 我还可以使用

  • 问题内容: 以前的JBoss版本包含一个脚本(如),可以将其复制到/etc/init.d以便将其添加为服务- 因此它将在启动时启动。我似乎在JBoss 7中找不到任何类似的脚本。有人做过这样的事情吗? PS我正在尝试在Ubuntu 10.04中实现这一点 问题答案: 在花了几个小时的窥探之后,我最终创建了以下内容 这是内容: 和: 显然,您需要确保将JAVA_HOME和JBOSS_HOME设置为适

  • 问题内容: 我最近将计算机从Ubuntu升级到。我面临使用服务即服务的问题。我安装 使用: 现在命令显示了这个结果: 尽管我的机器上安装了Java,但是我可以使用此命令启动服务器。 我有点卡在这里。任何帮助将不胜感激。 编辑 设置后根的错误: 问题答案: 我找到了解决此问题的方法。解决方案来自该讨论线程- 无法在Elastic网站上使用Ubuntu 16.04启动Elasticsearch 。 似

  • 我希望payara服务器作为服务运行。我以sudo的身份登录asadmin,并使用create-service命令。给出了以下输出。 这将在 /etc/init.d/ 文件夹中创建payara_production脚本,但一旦重新启动计算机,就不会执行此脚本。我必须手动启动payara才能运行它。 “您已经创建了服务,但是您需要自己启动它”是什么意思,我在之前使用的GlassFish版本中没有类似

  • null 设置IsTitlenewPage=“true”在子报表中使用时有效,但在用作主报表时,会导致详细信息带显示在第二页上。 在子报告之前使用中断意味着如果没有收据,将使用冗余页。

  • 问题内容: 如果运行以下命令,Redis会正确启动: 我添加了我的启动脚本: 但是,当我从全新启动中启动时,Redis无法运行。我应该在哪里解决此问题? 问题答案: 这个东西通常设置为20。现在,redis需要联网还为时过早。 因此,请尝试以下操作: