Я пытаюсь запустить службу, использующую $ HOME и $ USER переменные среды. Я мог бы запустить их сам, но это было бы временным решением.
Допустим, у меня есть сценарий test.sh
со следующим содержанием:
echo $USER
И я управляю им с start-stop-daemon
чтобы увидеть мои результаты:
$ start-stop-daemon --start --exec `pwd`/test.sh --user guest --group guest --chuid -guest
root
Похоже, он не обновляет среду, может быть, это следует сообщить как об ошибке?
Я нашел неприятное хакерское решение, которое работает (по неизвестной причине) только в моем простом варианте использования:
$ start-stop-daemon --exec /usr/bin/sudo --start -- -u guest -i 'echo $USER'
guest
Я уверен, что кто-то еще наткнулся на это, меня интересует чистое решение.
$ start-stop-daemon --version
start-stop-daemon 1.13.11+gentoo
Это могло быть предполагаемое поведение. На странице руководства отображается --env
вариант для start-stop-daemon
:
-e|--env env-name
Set an environment variable whose name and value is env-name
before starting executable. Example: -e HOME="/home/user"
exports an environment variable whose name is HOME with value
"/home/user". Note, only one --env option is suppoted, use
/usr/bin/env if you need more.
Автор использовал $HOME
в примере, который, как я понимаю, означает, что он обычно не устанавливает его. Я не вижу других вариантов обновления среды запускаемого вами процесса.
Попробуйте бежать start-stop-daemon
как это:
USER=guest HOME=~guest start-stop-daemon --start --exec /path/to/prog ...
Другой альтернативой было бы запустить скрипт под sudo
:
start-stop-daemon --start --exec /usr/bin/sudo -- -H -u guest /path/to/prog
sudo
автоматически установит $USER
, а -H
опция говорит ему установить $HOME
также. Я запустил оба эти test.sh
который печатает значения этих переменных, и обе обновляют их по желанию. Я неравнодушен к первому, потому что он не добавляет еще одну программу в микс, но это только я.
Возможно, оболочка сценария отличается от оболочки, в которой start-stop-daemon
это работает. Попробуйте указать оболочку в своем скрипте с помощью строки shebang:
#!/bin/bash
В моей системе sh
это Dash, который не устанавливается $USER
но унаследует его от родительского окружения.