LINUX.ORG.RU
ФорумAdmin

странная работа systemd

 ,


0

2

Эволюционно дошел до того, что в unit-файле надо запускать программу, название которой берется из переменной окружения.

До этого оттуда же брались опции и все работало. А тут резко перестало.

Суть проблемы в том, что может быть четыре варианта запускаемого файла - /usr/bin/ss-server /usr/bin/ss-local /usr/bin/ss-redir и еще один бинарь.

Я уже завел файл со всеми опциями и думал, что добавлю переменную BINARY и буду использовать ее. Вот так:

/etc/shadowsocks-libev/server

EXTRA_ARGS="-v -u --fast-open --reuse-port --no-delay"
BINARY="/usr/bin/ss-server"

systemd unit file:
 

[Unit]
Description=Shadowsocks-Libev Service for %I
After=network.target

[Service]
EnvironmentFile=/etc/shadowsocks-libev/%i
Type=simple
User=nobody
Group=nobody
LimitNOFILE=32768
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
ExecStart=$BINARY $EXTRA_ARGS -c /etc/shadowsocks-libev/%i.json

[Install]
WantedBy=multi-user.target

В таком варианте systemd ругается, что путь не абсолютный.

Меняю в файле

ExecStart=/usr/bin/$BINARY $EXTRA_ARGS -c /etc/shadowsocks-libev/%i.json

И вижу, что теперь он вовсе ни одну переменную не разворачивает!

Даже $EXTRA_ARGS, которая отлично работала до этого!

Меняю так:

ExecStart=/usr/bin/true $BINARY $EXTRA_ARGS -c /etc/shadowsocks-libev/%i.json

И все сразу с переменными приходит в норму.

Вот и думаю, это фича такая? и можно ли что то с этим сделать?

★★★★★

Вот и думаю, это фича такая?

Багофича (фича, но я не понимаю её смысла и мне кажется, что это искусственное ограничение). Имя исполняемого файла всегда должно быть абсолютным и не должно содержать подстановок.

и можно ли что то с этим сделать?

/usr/bin/env

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

Ну абсолютное имя, это допустим, разумно. Вот только определять его надо не регэкспом на лидирующий слеш, а нормально. Не должно содержать подстановок. А вот здесь в чем они криминал нашли, непонятно. Тем более, что обходится он просто на раз.

/usr/bin/env

что то не догоняю, что с этим делать.

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

Насчет /usr/bin/env сообразил.

Попробуем...

AVL2 ★★★★★
() автор топика

Проблема решена

Собрал пакет shadowsocks-libev для centos-7 с учетом опыта двухлетнего использования.

Если кому надо, лежит в моем репо для centos

http://repo.comp-house.ru/base/rhel7/x86_64/comp-house-release-7-2.noarch.rpm

Пакет так и называется shadowsocks-libev. Внутри есть короткая инструкция по настройке.

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