我可以在 systemd 的环境文件中设置多行环境变量吗?

我可以在 systemd 的环境文件中设置多行环境变量吗?

我需要一个像这样定义环境变量才能使我的应用程序的邮件功能正常工作:

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

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

juli 01 07:17:58 myserver systemd[1]: 忽略无效环境 'RUBY_MAIL_SMTP_SETTINGS=
7 月 1 日 07:17:58 myserver systemd[1]: :address: "smtp.example.com"
7 月 1 日 07:17:58 myserver systemd[1]: :port: "25"
7 月 1 日 07:17:58 myserver systemd[1]: :authentication: :plain
7 月 1 日 07:17:58 myserver systemd[1]: :加密: :tls
7 月 1 日 07:17:58 myserver systemd[1]: :user_name: "用户"
7 月 1 日 07:17:58 myserver systemd[1]: :password: "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"
'

这可行,但被解释为一行长行,这意味着内容不能被解析为 YAML。

那么,这是否意味着无法向 systemd 环境文件中添加多行环境变量?

答案1

您需要引用整个变量赋值(而不是值)并且每行都加上反斜杠。

示例服务文件:

[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

相关内容