Назад | Перейти на главную страницу

Как указать start-stop-daemon обновить $ HOME и $ USER в соответствии с параметром --chuid

Я пытаюсь запустить службу, использующую $ 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 но унаследует его от родительского окружения.