Unix / Linux - o arquivo da unidade de serviço não pode reconhecer a variável env definida no / etc / environment

1

Eu tenho uma configuração de variável de ambiente corretamente em /etc/environment

Eu assegurei que ele seja carregado corretamente via /etc/profile modification. e posso ecoar para confirmar.

mas quando eu criei o arquivo de unidade para o meu serviço, ele falha porque a variável de ambiente está ausente. No entanto, posso iniciar o script normalmente.

aqui está o arquivo da unidade de serviço:

[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 mostra que java não foi encontrado - mas o java existe através do caminho $ JAVA_HOME que é facilmente encontrado quando eu inicio diretamente do bash.

Eu não sou um usuário administrador :) então erros bobos provavelmente estão sendo cometidos aqui. Por favor, alguém poderia aconselhar? Eu deveria adicioná-lo no arquivo system.conf e recarregar o daemon?

Atenciosamente,

    
por hagubear 10.07.2018 / 20:05

1 resposta

3

Com o Systemd, você precisará chamar explicitamente arquivos com declarações de variáveis de ambiente. Por exemplo:

[Service]
EnvironmentFile=-/etc/environment

O "-" na EnvironmentFile = line garante que nenhuma mensagem de erro seja gerada se o arquivo de ambiente não existir. Como muitos desses arquivos eram opcionais no sysvinit, você deve incluir o "-" ao usar esta diretiva.

Além disso, é importante notar que geralmente há três maneiras de realizar o que você precisa:

  1. Como mencionado acima, coloque as atribuições de variáveis em um arquivo (como / etc / environment) e faça referência a esse arquivo por unidade com EnvironmentFile=
  2. Variáveis de ambiente de referência diretamente no arquivo de unidade individual com Environment=
  3. Coloque a atribuição da variável na variável DefaultEnvironment em /etc/systemd/system.conf ou em um fragmento em /etc/systemd/system.conf.d/some-file.

Confira o guia do Fedora sobre o assunto, particularmente a seção EnrionmentFile .

    
por 10.07.2018 / 20:34