Posso definir uma variável de ambiente de várias linhas no EnvironmentFile do systemd?

1

Eu preciso de uma variável de ambiente como esta definida para os recursos de e-mail do meu aplicativo funcionarem:

RUBY_MAIL_SMTP_SETTINGS='
:address: "smtp.example.com"
:port: "25"
:authentication: :plain
:encryption: :tls
:user_name: "user"
:password: "pass"
'

Colocar isso em um terminal bash funciona bem, mas colocá-lo em um arquivo de ambiente e referenciá-lo a partir de um arquivo de unidade systemd com a opção EnvironmentFile não funciona:

juli 01 07:17:58 myserver systemd[1]: Ignoring invalid environment 'RUBY_MAIL_SMTP_SETTINGS=
juli 01 07:17:58 myserver systemd[1]: :address: "smtp.example.com"
juli 01 07:17:58 myserver systemd[1]: :port: "25"
juli 01 07:17:58 myserver systemd[1]: :authentication: :plain
juli 01 07:17:58 myserver systemd[1]: :encryption: :tls
juli 01 07:17:58 myserver systemd[1]: :user_name: "user"
juli 01 07:17:58 myserver systemd[1]: :password: "pass"': /usr/local/etc/myproject/environment

Eu tentei anexar uma barra invertida após cada linha, assim:

RUBY_MAIL_SMTP_SETTINGS='\
:address: "smtp.example.com"\
:port: "25"\
:authentication: :plain\
:encryption: :tls\
:user_name: "user"\
:password: "pass"
'

Isso funciona, mas é interpretado como uma linha longa, o que significa que o conteúdo não pode ser analisado como YAML.

Então, isso significa que é impossível adicionar variáveis de ambiente multilinhas aos arquivos do ambiente systemd?

    
por Hubro 01.07.2015 / 07:15

1 resposta

4

Você precisa citar toda a atribuição de variável (não o valor) E inverter cada linha.

Exemplo de arquivo de serviço:

[Service]
Environment='RUBY_MAIL_SMTP_SETTINGS=\
:address: "smtp.example.com"\
:port: "25"\
:authentication: :plain\
:encryption: :tls\
:user_name: "user"\
:password: "pass"\
'

ExecStart=/bin/echo $RUBY_MAIL_SMTP_SETTINGS

A execução deste exemplo produzirá log:

Oct 27 14:03:32 io echo[9621]: :address: smtp.example.com :port: 25 :authentication: :plain :encryption: :tls :user_name: user :password: pass
    
por 27.10.2015 / 12:08