Як вказати директиву про середовище systemd, що містить =?


20

Я хочу вказати Environment systemdдирективу, що містить =, напр

Environment=CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

і отримати помилку

[/lib/systemd/system/archiva.service:10] Invalid environment assignment, ignoring: CATALINA_OPTS=-Dappserver.home\=/var/lib/archiva/apache

в journalctl -xe. Я намагався процитувати з "і 'і бігти =з \небезуспішно. Це здається недокументованим.

Відповіді:


40

Я думаю, що ваша проблема обумовлена ​​простором у вмісті змінної середовища. Переглядаючи приклади із системних документів , у призначенні має бути один рядок:

Приклад:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}

Це буде виконуватися / бен / відлуння з чотирма аргументами: one, two, two, і two two.

Приклад:

Environment=ONE='one' "TWO='two two' too" THREE=
ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
ExecStart=/bin/echo $ONE $TWO $THREE

Це призводить до луни викликається двічі, перший раз з аргументами 'one', 'two two' too, і другий раз з аргументами one, two two, too.

Я перевірив це за допомогою наступного сервісу (відзначте цитати в усьому завданні):

[Unit]
Description=My Daemon

[Service]
Environment='CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current'
ExecStart=/bin/echo ${CATALINA_OPTS}

[Install]
WantedBy=multi-user.target

І отримали бажаний вихід у journalctl:

Apr 26 08:19:29 laptop echo[28439]: -Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

Звичайно, використовувати це було б простіше EnvironmentFile. Заміна на Environmentнаступне дала такий же бажаний результат:

EnvironmentFile=/tmp/foo

Де /tmp/fooмістяться (зверніть увагу на відсутність цитат):

CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current

Якщо мова йде про цитування цитат (наприклад, використання CATALINA_OPTSв systemdсередовищі для Apache tomcat7.0.61) використання EnvironmentFileсправді - це саме шлях. Спасибі!
Карл Ріхтер

Що таке стандартний / конвенційний каталог для збереження файлу EnvironmentFile на Ubuntu? В інших системах я бачив / etc / sysconfig /
Davos

1
@Davos було б розумне місце /etc/default. Файли, які раніше існували, використовувались для розміщення змінних середовища для відповідних сценаріїв init.
muru

У мене цей файл вже є в моїй системі / etc / середовищі, яка містить змінну PATH, чи було б це доцільним?
Давос

1
@Davos - це в усьому світі. Якщо зміна не буде встановлена ​​практично для кожного процесу, обов'язково. Зверніть увагу, що /etc/environmentне обробляється оболонкою; окрім простого призначення змінної, його синтаксис сильно відрізняється від системного синтаксису, зазначеного вище, або загального синтаксису оболонки.
muru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.