$ 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
は$USER
を設定しないダッシュですが、親の環境から継承します。