我已经正确设置了环境变量/etc/environment
我已确保它通过/etc/profile
修改正确加载。并且我可以回应它来确认。
但是当我为我的服务创建单元文件时,由于缺少环境变量,它失败了。但是,我可以正常地自行启动脚本。
这是我的服务单元文件:
[Unit]
Description=Zookeeper unit for this machine
AssertPathExists=/opt/kafka
[Service]
Type=simple
ExecStart=/opt/kafka/bin/zookeeper-server-start.sh /opt/kafka/config/zookeeper.properties
ExecStop=/opt/kafka/bin/zookeeper-server-stop.sh
journalctl 显示java
未找到 - 但 java 通过 $JAVA_HOME 路径存在,当我直接从 bash 启动它时很容易找到它。
我不是管理员用户 :) 所以这里可能犯了一些愚蠢的错误。请问有人能给出建议吗?我应该将其添加到 system.conf 文件中并重新加载守护进程吗?
问候,
答案1
使用 Systemd,您需要明确调用带有环境变量声明的文件。例如:
[Service]
EnvironmentFile=-/etc/environment
EnvironmentFile= 行上的“-”确保如果环境文件不存在,则不会生成错误消息。由于这些文件中的许多文件在 sysvinit 中都是可选的,因此在使用此指令时应包含“-”。
此外,值得注意的是,通常有三种方法可以完成您的需要:
- 如上所述,将变量分配放在一个文件中(例如 /etc/environment),然后使用以下命令在每个单元中引用该文件
EnvironmentFile=
- 在单个单元文件中引用环境变量
Environment=
- 将变量赋值放在
DefaultEnvironment
/etc/systemd/system.conf 中的变量或 /etc/systemd/system.conf.d/some-file 中的代码片段中。
请查看 Fedora 关于此主题的指南,特别是EnrionmentFile 部分。