1

У меня правильно установлена переменная окружения в /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 ответ1

3

С Systemd вам нужно явно вызывать файлы с объявлениями переменных среды. Например:

[Service]
EnvironmentFile=-/etc/environment

«-» в строке EnvironmentFile = гарантирует, что сообщение об ошибке не будет создано, если файл среды не существует. Поскольку многие из этих файлов были необязательными в sysvinit, вы должны включить «-» при использовании этой директивы.

Также стоит отметить, что обычно есть три способа выполнить то, что вам нужно:

  1. Как упомянуто выше, поместите назначения переменных в файл (например, /etc /environment) и укажите этот файл на единицу с EnvironmentFile=
  2. Справочные переменные среды прямо в отдельном файле модуля с Environment=
  3. Поместите назначение переменной в переменную DefaultEnvironment в /etc/systemd/system.conf или сниппета в /etc/systemd/system.conf.d/some-file.

Ознакомьтесь с руководством Fedora по этому вопросу, в частности, с разделом EnrionmentFile.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .