Эволюционно дошел до того, что в 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
И все сразу с переменными приходит в норму.
Вот и думаю, это фича такая? и можно ли что то с этим сделать?