Назад | Перейти на главную страницу

Могу ли я установить многострочную переменную среды в EnvironmentFile 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]: 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

Я пробовал добавлять обратную косую черту после каждой строки, например:

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

Это работает, но интерпретируется как одна длинная строка, что означает, что содержимое не может быть проанализировано как YAML.

Означает ли это, что невозможно добавить многострочные переменные среды в файлы среды systemd?

Вам нужно указать все присвоение переменной (а не значение) И поставить обратную косую черту для каждой строки.

Пример служебного файла:

[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