从SonarQube 6.5升级到6.6后,使用elasticsearch时出现“无法以root身份运行”的错误。除此之外没有其他更改。

20

升级SonarQube从6.5到6.6后,使用elasticsearch时出现“无法以root用户运行”的错误。没有其他更改。

CentOS release 6.8 (Final) Java(TM) SE Runtime Environment (build 1.8.0_101-b13)

java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.6.2.jar:5.6.2]
2017.10.20 11:59:14 WARN  es[][o.e.b.ElasticsearchUncaughtExceptionHandler] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.2.jar:5.6.2]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.2.jar:5.6.2]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.2.jar:5.6.2]
        ... 6 more

1
检查运行软件的用户。请参阅此文 - Jeroen Heier
请查看https://michalwegrzyn.wordpress.com/2016/07/14/do-not-run-sonar-as-root/。 - meck373
看看这个解决方案,可能会起作用。https://stackoverflow.com/a/72376209/5659278 - Kushwaha
4个回答

41

我也遇到了这个问题,在Centos 7上以root身份运行SonarQube,没有在Docker中运行。正如之前的评论所提到的,问题来自于SonarQube升级ElasticSearch,新版本不再允许以root身份运行。

在我的环境中,修复很容易:我已经创建了一个用户(“sonar”)和组(“sonar”)来“拥有”sonarqube文件。由于我的SonarQube进程一直以root身份运行,它留下的日志和临时文件都是root所有的。
1. 停止服务。
2. 重新分配所有权(“chown -R sonar:sonar /opt/sonarqube-6.6”)
3. 将/opt/sonarqube-6.6/bin/linux-x86-64/sonar.sh第48行的#RUN_AS_USER=更改为RUN_AS_USER=sonar,然后sonarqube服务和其elasticsearch服务都重新启动而没有出现问题。我需要去 http://<sonarhost:port>/setup 升级数据库,之后一切工作正常。


5
这个答案应该被提问者@RayeRaskin接受。请参阅https://dev59.com/wFYN5IYBdhLWcg3wQWIV#47733598了解原因。 - Amedee Van Gasse
3
如果您没有一个声纳用户,只需添加useradd sonar来创建一个,然后进行第二步操作即可完美运行。 - carl verbiest

2

systemd的变更:

User=sonar
Group=sonar

并更改所有源代码和#RUN_AS_USER=sonar。它将运行。当以root身份运行,然后切换到sonar时,似乎出现了环境错误。


0

遇到了相同的问题,我在我的Sonar服务文件中做了一些更改,然后它开始工作了。以下是我的Sonar服务文件:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
#Type=simple
User=sonar
Group=sonar
PermissionsStartOnly=true
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
#TimeoutStartSec=5
Restart=always

[Install]
WantedBy=multi-user.target

还要跟着改变Sonar用户的主目录。
$ usermod -d /opt/sonarqube sonar

-1

我下载了sonarqube-6.5并尝试设置一个新用户"sonar",但在Ubuntu 16.4上仍然无法通过es,原因相同。


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