如何告诉start-stop-daemon将$ HOME和$ USER相应地更新为--chuid参数

Modified on: Fri, 23 Aug 2019 22:00:03 +0800

我正在尝试运行使用$ HOME$ USER环境变量的服务。我可以将它们设置为服务本身,但这只是一个临时解决方案。

假设我有一个脚本test.sh,内容如下:

echo $USER

我用start-stop-daemon运行它以查看我的结果:

$ start-stop-daemon --start --exec `pwd`/test.sh --user guest --group guest --chuid -guest
root

好像它没有更新环境,也许应该报告为bug?

我找到了一个令人讨厌的hacky解决方案,它只对我这个简单的用例有效(原因不明):

$ 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

最佳答案

这可能是预期的行为。手册页显示--envstart-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运行这两个,它打印了这些变量的值,并根据需要更新了它们。我偏爱第一个,因为它没有添加另一个程序,但这只是我。


相关问答

添加新评论