我可以在systemd的EnvironmentFile中设置一个多行环境variables吗?

我需要为我的应用程序的邮件function定义一个这样的环境variables来工作:

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

将其粘贴到bashterminal中工作正常,但将其放入环境文件中,并使用EnvironmentFile选项从systemd单元文件中引用它不起作用:

  juli 01 07:17:58 myserver systemd [1]:忽略无效环境'RUBY_MAIL_SMTP_SETTINGS =
 juli 01 07:17:58 myserver systemd [1]::地址:“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]::密码:“pass”:/ usr / local / etc / myproject / environment 

我已经尝试在每行之后添加反斜杠,如下所示:

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

这个工作,但被解释为一个长行,这意味着内容不能被parsing为YAML。

那么这是否意味着将多行环境variables添加到systemd环境文件是不可能的?

您需要引用整个variables赋值(不是值),并且每行反斜线。

示例服务文件:

 [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 

运行这个例子会产生日志:

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