Ответ зависит от того, должна ли переменная быть постоянной (то есть не должна изменяться пользователем, получающим единицу) или переменной (должна быть установлена пользователем).
Поскольку это ваша локальная единица, граница довольно размыта и в любом случае будет работать. Однако, если вы начнете распространять его, и это закончится /usr/lib/systemd/system
, это станет важным.
Постоянное значение
Если значение не нужно изменять для каждого экземпляра, предпочтительным способом было бы разместить его как Environment=
непосредственно в файле модуля:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Преимущество этого заключается в том, что переменная хранится в одном файле с модулем. Поэтому файл модуля легче перемещать между системами.
Значение переменной
Однако вышеприведенное решение не работает, когда предполагается, что sysadmin локально изменяет значение переменной среды. Более конкретно, новое значение необходимо будет устанавливать каждый раз, когда обновляется файл модуля.
Для этого случая должен использоваться дополнительный файл. Как - обычно зависит от политики распространения.
Одним из особенно интересных решений является использование /etc/systemd/system/myservice.service.d
каталога. В отличие от других решений, этот каталог поддерживается самой системой systemd и поэтому не содержит путей, специфичных для дистрибутива.
В этом случае вы помещаете такой файл, /etc/systemd/system/myservice.service.d/local.conf
который добавляет недостающие части файла модуля:
[Service]
Environment="FOO=bar baz"
После этого systemd объединяет эти два файла при запуске службы (не забудьте systemctl daemon-reload
после изменения любого из них). И так как этот путь используется непосредственно systemd, вы не используете EnvironmentFile=
для этого.
Если предполагается, что значение будет изменено только в некоторых из затронутых систем, вы можете объединить оба решения, предоставив значение по умолчанию непосредственно в модуле и локальное переопределение в другом файле.
sysconfig
путь специфичен для Fedora, но вопрос об Arch Linux. Я думаю, что ответ от Paluh более интересен