web-dev-qa-db-ja.com

--chuidパラメータに応じて$ HOMEと$ USERを更新するようにstart-stop-daemonに指示する方法

$ 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
6
iElectric

これは意図された動作である可能性があります。マニュアルページは--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で実行し、必要に応じて両方を更新しました。ミックスに別のプログラムを追加しないので、私は最初の人に部分的ですが、それは私だけです。

6

スクリプトのシェルとstart-stop-daemonが実行されている環境のシェルが異なる可能性があります。 Shebang行を使用してスクリプトでシェルを指定してみてください:

#!/bin/bash

私のシステムでは、sh$USERを設定しないダッシュですが、親の環境から継承します。