переменные среды передачи к сервисам, запущенным с systemctl

У меня есть nodeJS сервис, созданный с помощью NodeJs. Этот сервис требует, чтобы некоторые переменные среды были переданы ему. Кроме того, я создал systemd файл единицы для запуска его с systemctl. По некоторым странным причинам сервис при запуске с systemctl не читает переменные среды. Например, одной переменной среды является ХОСТ, который содержит IP, с которым будет связано приложение парусов. Однако, если я запускаю сервис с лифта парусов или узла app.js, он действительно читает переменные среды. Вот файл единицы:

[Unit]
Description=project

[Service]
ExecStart=/usr/bin/node /mnt/project/app.js
Restart=always
StandardOutput=syslog

[Install]
WantedBy=multi-user.target

Я попробовал все. Я добавил переменные среды к/etc/environment и указал на файл единицы на него, я также добавил их к файлу единицы, но ничто не работало.

4
задан 28 July 2017 в 17:12

2 ответа

Это происходит, потому что единица в systemd инкапсулируется от отдыха системы. Вы попытались установить его непосредственно в файле единицы как это?

Среда = "FOO=foo" 'BAR=bar'

НЕЧТО переменных и ПАНЕЛЬ затем доступны в Вашей единице. Например, если это - мой ExecuteStart:

$FOO $ {НЕЧТО} $ {панель} ExecStart =/bin/echo

С Environment опция от вышеупомянутого это привело бы к следующему выводу:

панель нечто нечто

Альтернатива сделала бы его с помощью файла конфигурации среды. Для этого можно прочитать фетровую документацию:

http://fedoraproject.org/wiki/Packaging:Systemd#EnvironmentFiles_and_support_for_.2Fetc.2Fsysconfig_files

Эта ссылка содержит некоторые полезные примеры с докером:

https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html

6
ответ дан 1 December 2019 в 09:20

у меня была та же проблема с puma вообще не загружались значения файла .env (в веб-приложении ruby ​​on rails)...

Все, что мне нужно было сделать было определить значения в файле puma.service с использованием Environment, например:

sudo vi /etc/systemd/system/puma.service

[Unit]
Description=Puma HTTP Server
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/rails_current_server

Environment="RAILS_ENV=production"
Environment="SERVER_TYPE=111"

ExecStart=/bin/bash -lc 'bundle exec puma -C /home/ubuntu/rails_current_server/config/puma.rb'
Restart=always
KillMode=process

[Install]
WantedBy=multi-user.target

Другим вариантом будет жестко запрограммировать значения переменных env прямо в ExecStart примерно так: ExecStart=/bin/bash -lc 'RAILS_ENV=production SERVER_TYPE=111 bundle exec puma -C /home/ubuntu/rails_current_server /config/puma.rb'

0
ответ дан 7 February 2021 в 01:40

Другие вопросы по тегам:

Похожие вопросы: