Como especificar uma diretiva systemd do ambiente contendo =?

10

Eu quero especificar uma diretiva Environment systemd contendo = , por exemplo

Environment=CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

e obtenha o erro

[/lib/systemd/system/archiva.service:10] Invalid environment assignment, ignoring: CATALINA_OPTS=-Dappserver.home\=/var/lib/archiva/apache

em journalctl -xe . Eu tentei citar com " e ' e para escapar de = com \ sem sucesso. Isto parece não documentado.

    
por Karl Richter 26.04.2015 / 04:10

1 resposta

24

Eu acho que o seu problema é devido ao espaço no conteúdo da variável de ambiente. Analisando os exemplos dos documentos do systemd , uma tarefa deve ser uma única string:

  

Exemplo:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}
     

Isso executará / bin / echo com quatro argumentos: one , two , two ,   e two two .

     

Exemplo:

Environment=ONE='one' "TWO='two two' too" THREE=
ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
ExecStart=/bin/echo $ONE $TWO $THREE
     

Isso resulta em eco sendo chamado duas vezes, a primeira vez com argumentos    'one' , 'two two' too , e a segunda vez com argumentos    one , two two , too .

Eu testei isso com o seguinte serviço (observe as aspas ao redor de toda a tarefa):

[Unit]
Description=My Daemon

[Service]
Environment='CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current'
ExecStart=/bin/echo ${CATALINA_OPTS}

[Install]
WantedBy=multi-user.target

E obtive a saída desejada em journalctl :

Apr 26 08:19:29 laptop echo[28439]: -Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

Claro, seria mais simples usar EnvironmentFile . Substituir Environment pelo seguinte deu o mesmo resultado desejado:

EnvironmentFile=/tmp/foo

Onde /tmp/foo contido (observe a falta de citações):

CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
    
por muru 26.04.2015 / 04:56