CentOS7中Elasticsearch7.17.0启动失败求助(sd_notify错误-13)
Elasticsearch 7.17.0在CentOS 7启动失败:sd_notify返回错误-13
问题概述
在CentOS 7系统中安装Elasticsearch 7.17.0后无法启动实例,配置文件保持默认未修改。错误日志显示sd_notify returned error [-13],底层是对libsystemd.so.0的原生调用失败,推测与systemd服务相关。
错误日志
[2023-11-24T09:05:44,263][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: sd_notify returned error [-13] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:157) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112) ~[elasticsearch-cli-7.17.0.jar:7.17.0] at org.elasticsearch.cli.Command.main(Command.java:77) ~[elasticsearch-cli-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:122) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80) ~[elasticsearch-7.17.0.jar:7.17.0] Caused by: java.lang.RuntimeException: sd_notify returned error [-13] at org.elasticsearch.systemd.SystemdPlugin.onNodeStarted(SystemdPlugin.java:127) ~[?:?] at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?] at org.elasticsearch.node.Node.start(Node.java:1280) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:335) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:443) ~[elasticsearch-7.17.0.jar:7.17.0] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:166) ~[elasticsearch-7.17.0.jar:7.17.0]
问题分析
错误码-13对应systemd的权限错误(EPERM/EACCES),原因通常是:
- Elasticsearch未以systemd服务方式启动,但默认启用的systemd插件尝试向systemd发送状态通知,此时进程无法访问systemd的通知套接字
- 运行Elasticsearch的用户权限不足,无法与systemd通信
解决方案
1. 以systemd服务方式启动
默认安装Elasticsearch时会自动生成systemd服务文件,直接通过systemd管理启动:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch # 设置开机自启
验证状态:
sudo systemctl status elasticsearch
2. 禁用systemd插件
如果不需要通过systemd管理Elasticsearch,可直接禁用systemd插件:
编辑Elasticsearch配置文件/etc/elasticsearch/elasticsearch.yml,添加以下配置:
node.attr.systemd.enabled: false
保存后重新启动Elasticsearch:
sudo systemctl restart elasticsearch
3. 检查进程权限
- 确保以
elasticsearch用户运行进程,禁止用root用户直接启动:sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch - 手动启动时systemd的
NOTIFY_SOCKET环境变量不存在,此时禁用systemd插件即可避免错误
内容的提问来源于stack exchange,提问作者Balaji Padmanabhan
相关产品推荐
相关产品推荐

