Мне нужна переменная среды, подобная этой, определенная для работы почтовых функций моего приложения:
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