在 Elasticsearch systemd 服务脚本中配置 Java 环境变量

适用场景:当系统存在多个 JDK 版本,或 Elasticsearch 未自动识别 JAVA_HOME 时,需在 systemd 服务文件中显式指定 Java 路径。


一、原始配置片段

[Service]
RuntimeDirectory=elasticsearch
Environment=JAVA_HOME=/opt/jdk1.8.0_65/
Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_PATH_CONF=/etc/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/default/elasticsearch

二、完整操作步骤

1. 编辑 systemd 服务文件

通常位于:

/etc/systemd/system/elasticsearch.service

/usr/lib/systemd/system/elasticsearch.service

✅ 建议优先编辑 /etc/systemd/system/ 下的副本(覆盖默认配置)。

2. 在 [Service] 段中添加环境变量

将您提供的 Environment 行插入到 [Service] 区块内,例如:

[Unit]
Description=Elasticsearch
Documentation=https://www.elastic.co
Wants=network-online.target
After=network-online.target

[Service]
Type=notify
User=elasticsearch
Group=elasticsearch
RuntimeDirectory=elasticsearch
Environment=JAVA_HOME=/opt/jdk1.8.0_65/
Environment=ES_HOME=/usr/share/elasticsearch
Environment=ES_PATH_CONF=/etc/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch
EnvironmentFile=-/etc/default/elasticsearch
ExecStart=/usr/share/elasticsearch/bin/elasticsearch -p ${PID_DIR}/elasticsearch.pid --quiet
Restart=on-failure
LimitMEMLOCK=infinity
TimeoutSec=120

[Install]
WantedBy=multi-user.target

3. 重载 systemd 并重启服务

sudo systemctl daemon-reload
sudo systemctl restart elasticsearch

4. 验证 Java 路径是否生效

# 查看进程实际使用的 JAVA_HOME
sudo systemctl show elasticsearch | grep JAVA_HOME

# 或检查日志
journalctl -u elasticsearch -n 50

三、注意事项

  • 路径 /opt/jdk1.8.0_65/ 必须真实存在且 elasticsearch 用户有读取权限。
  • EnvironmentFile=-/etc/default/elasticsearch 中的 - 表示该文件可选(不存在也不报错)。
  • 若同时在 /etc/default/elasticsearch 中设置了 JAVA_HOMEsystemd 中的 Environment 优先级更高

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐