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 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.