У меня есть продукт, предоставленный сторонним поставщиком.Он включает в себя множество сервисов, для которых они предоставляют сценарии запуска в стиле initd.Существует один сценарий для каждой предоставляемой службы.
Эти сценарии ссылаются на переменные, такие как JAVA_HOME, THE_PRODUCT_HOME и так далее.Ожидание от поставщика, что я должен отредактировать эти сценарии вручную и жестко закодировать правильные значения.Я предпочел бы, чтобы эти переменные были инициализированы из переменных окружения, полученных из systemd при загрузке системы.
Я знаю, что могу создать файл конфигурации переопределения для каждой из служб, чтобы обеспечить необходимые условия (так называемые переменные среды), используяsystemctl edit theService
но:
- Существует довольно много сценариев запуска
- Базовые переменные одинаковы
- Я бы хотел избежать "systemctl edit" ingкаждый из предоставленных сценариев, если я могу
До сих пор я пытался использовать systemctl set-environment VAR_NAME=some_value
.
Это прекрасно работает - пока я не перезагружу систему.Кажется, что переменные, установленные таким образом, определены глобально, но не переживают перезагрузку.Я также попытался использовать systemctl daemon-reload
только на тот случай, если это необходимо для «фиксации» настроек (но, похоже, это не спасает глобальные объекты).
На данный момент я отредактировал каждую из них.из поставляемых сценариев запуска и source /path/to/theGlobalVariablesINeed.sh
Это прекрасно работает как обходной путь , но не является моим предпочтительным решением в будущем ...
Вот иллюстрация того, чтопроисходит:
определяют некоторые переменные
[root@dav1-td1 -> ~] # systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@dav1-td1 -> ~] #
[root@dav1-td1 -> ~] # systemctl set-environment SYSD_PRODNAME_JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/jre
[root@dav1-td1 -> ~] # systemctl set-environment SYSD_PRODNAME_HOME=/opt/TheProduct-1.2.3
[root@dav1-td1 -> ~] # systemctl daemon-reload # This is optional, if I run the reload, or do not run the reload, the variables are still lost over a reboot.
демонстрируют, что переменные установлены.
#### Now some variables are set, If I restart a service, the service will
#### Pick up these environmental variable settings.
[root@dav1-td1 -> ~] # systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
SYSD_PRODNAME_HOME=/opt/TheProduct-1.2.3
SYSD_PRODNAME_JAVA_HOME=/usr/java/jdk1.8.0_181-amd64/jre
[root@dav1-td1 -> ~] #
Перезапуск системы
#### After restart, the variables have disappeared !?!?
[root@dav1-td1 -> ~] # systemctl show-environment
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
[root@dav1-td1 -> ~] #
Как уже упоминалосьвыше, когда я перезагружаю систему, все среды, которые я установил с помощью systemctl set-environment VAR=value
, теряются.
Мне нужны эти переменные, чтобы пережить перезапуск (без использования файлов переопределения для каждой службы и без необходимости создания файла, содержащего всепеременных)