elasticsearch 使用 systemd 启动时卡在 starting 状态 解决过程记录

上个星期使用 二进制包 elasticsearch-9.2.1-linux-x86_64.tar.gz 安装 elasticsearch 之后,遇到了一个问题,当执行 systemctl start elasticsearch.service 命令之后 就卡住了,状态如下:

另开一个窗口执行 systemctl status elasticsearch 可以看出, elasticsearch 实际上已经启动成功,但是 systemd 给出状态却停留在 Starting...:

打开浏览器也可以看到 elasticsearch 服务的状态是正常的:

从上面的截图上可以看到,elasticsearch.service 的 Main PID 是 15688 ,即 /usr/local/elasticsearch/jdk/bin/java -Xms4m -Xmx64m...这个进程通常是 Elasticsearch 的启动器 (Launcher) 或 Java wrapper。它的主要任务是设置环境变量、配置 JVM 参数,然后 exec 或 fork 出真正运行 Elasticsearch 服务的 Java 进程。

进程 15789 /usr/local/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60...是运行 Elasticsearch 核心功能 的 主 Java 进程。它是实际负责监听 9200 和 9300 端口、处理索引和查询请求的进程。当前 elasticsearch.service 里面 Service Type 配置的是 notify,服务在完成初始化并准备好接受请求时,必须通过 sd_notify() 函数向 systemd 发送一个 READY=1 信号。systemd 会等待这个就绪信号,收到信号后才将服务标记为 active (running)。导致 systemctl start elasticsearch.service 命令一直阻塞 的原因就是 systemd 没有收到 就绪信号。

解决方式:将 elasticsearch.service 里面 Service Type 配置成 forking 并将 NotifyAccess=all 与 Environment=ES_SD_NOTIFY=true 注释掉

修改之后,systemctl daemon-reload 然后启动就正常了:

这里还有一个重点,修改后的 Main PID 变成了 /usr/local/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60... 进程的 PID

相关推荐
Elastic 中国社区官方博客3 分钟前
ES|QL METRICS_INFO 和 TS_INFO:为你的时间序列数据建立目录
大数据·数据库·elasticsearch·搜索引擎·信息可视化·全文检索
峥无1 小时前
Linux系统编程基石:静态库·动态库·ELF文件·进程地址空间全景图
linux·运维·服务器
用户2367829801681 小时前
从 chmod 755 说起:Unix 文件权限到底是怎么算的?
linux
码云数智-大飞1 小时前
本地部署大模型:隐私安全与多元优势一站式解读
运维·网络·人工智能
Strugglingler1 小时前
【systemctl 学习总结】
linux·systemd·systemctl·journalctl·unit file
Harvy_没救了2 小时前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
Elastic 中国社区官方博客3 小时前
Elastic 和 Cursor 合作 加速 上下文工程 与 coding agents
大数据·人工智能·elasticsearch·搜索引擎·全文检索
春风有信3 小时前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
嵌入式×边缘AI:打怪升级日志3 小时前
100ASK-T113 Pro 开发板 Bootloader 完全开发指南
linux·ubuntu·bootloader
2401_873479404 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络