LINUX.ORG.RU

systemd и параметры

 


0

2

Кто-нибудь знает как можно в систумд юнит-файле приделать к Exec* параметры из конфиг-файла типа

-opt1 val1 -opt2 val2

Первое что пришло на ум - сделать EnvFile и start-stop скрипт, но это ж вроде как initv-way и уже не модно

Короче я разрабам уже написал патч для env, можно спать спокойно



Последнее исправление: upcFrost (всего исправлений: 1)
[Service]
EnvironmentFile=/path/to/config
ExecStart=/path/to/binary $ARGUMENTS_FROM_CONFIG

где /path/to/config выглядит как:

...
ARGUMENTS_FROM_CONFIG=-opt1 val1 -opt2 val2
(без какой-либо дополнительной разметки, допустимы только K=V, пустые строки и комментарии)

intelfx 👍👍👍
()
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от Deleted

Тоесть без стороннего файла с переменными не получится?

Получится.

intelfx 👍👍👍
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Количество параметров может меняться. Эх, ладно, понял уже что проще я этим чертям патч для env vars напишу и один из их тикетов закрою чем буду с систумд возиться. Даже пользы больше будет

upcFrost
() автор топика
Ответ на: комментарий от upcFrost

Не понял, так чего ты хочешь получить? Когда все параметры одной строкой — тебе не нравится. Когда все параметры разнесены по разным переменным — тоже не нравится.

Если ты хочешь аналог ${FOO:+--foo $FOO} — здесь его нет. В таком случае используй bash -c "exec ...".

intelfx 👍👍👍
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

Когда все параметры одной строкой — тебе не нравится

фишка что параметров может быть дофига. и длина этой строки может довольно быстро выйти за разумные пределы. В старых инит-скриптах это делалось пачкой if-then с постепенным набиванием строки. Собственно есть ли аналогичный механизм?

Короче видимо проще либо патч писать чтоб софт env принимал, либо писать дополнительный скрипт который будет параметры набивать

upcFrost
() автор топика
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от upcFrost

Как я уже написал выше — нет, аналогичного механизма в systemd не встроено, это слишком высокоуровневая фича.

Скрипт для этого писать не надо; однострочник на баше со сложными подстановками вписывается прямо в ExecStart=. Главное — не забудь сделать exec.

intelfx 👍👍👍
()
Ответ на: комментарий от intelfx

это слишком высокоуровневая фича.

ну тут можно поспорить, ну ладно, фиг с ним

Я просто опасаюсь что этот однострочник раздуется просто до неприличия, а т.к. параметры могут идти с разным регистром (нельзя просто перекинуть APIPORT -> apiport, нужно apiPort), сделать его короче не выйдет. Да и тикет у ребят висит мол сделайте поддержку env vars, так что я им проще правда патч вкачу и буду EnvironmentFile юзать

upcFrost
() автор топика
Последнее исправление: upcFrost (всего исправлений: 1)
Ответ на: комментарий от anonymous

Я бы может подумал обижаться что мол говнопрограмма, но так как она не моя (от меня пара патчей только) - просто грустно кивну

upcFrost
() автор топика

А если в качестве Exec выбрать не программу, а твой «инит»-скрипт, который уже будет тебе всё что нужно делать?

anonymous
()
Ответ на: комментарий от anonymous

можно, но это ж фу и не модно. Я б так и сделал если честно, просто получается как-то странно, вроде и систумд, а вроде опять в initv уходим

upcFrost
() автор топика
Ответ на: комментарий от Radjah

Не умеет она конфигов :( только флаги. Короче я им уже написал патч для env, завтра отправлю PR.

upcFrost
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.