У меня есть 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 и указал на файл единицы на него, я также добавил их к файлу единицы, но ничто не работало.
Это происходит, потому что единица в systemd инкапсулируется от отдыха системы. Вы попытались установить его непосредственно в файле единицы как это?
Среда = "FOO=foo" 'BAR=bar'
НЕЧТО переменных и ПАНЕЛЬ затем доступны в Вашей единице. Например, если это - мой ExecuteStart:
$FOO $ {НЕЧТО} $ {панель} ExecStart =/bin/echo
С Environment
опция от вышеупомянутого это привело бы к следующему выводу:
панель нечто нечто
Альтернатива сделала бы его с помощью файла конфигурации среды. Для этого можно прочитать фетровую документацию:
Эта ссылка содержит некоторые полезные примеры с докером:
https://coreos.com/os/docs/latest/using-environment-variables-in-systemd-units.html
у меня была та же проблема с 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'