/home/jack/myscript.sh
私が実行したいスクリプトは次のとおりです。
export JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
/home/jack/myapp/apache-tomcat-6.0.32/bin/./catalina.sh run
/etc/init/myapp.conf
私が書いた新文書:
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
exec `su jack -c /home/jack/myscript.sh`
もしそうなら、ユーザーとしてスクリプトを実行したい場合、jack
上記の設定はうまくいきますか?もっと良い方法がありますか?
答え1
~によるとヌボリッチレシピ、さまざまなユーザーでサービスを実行する組み込み機能が計画されていますが、まだ実装されていません。
利用可能な場合はstart-stop-daemon
使用してください。
exec start-stop-daemon --start -u jack --exec /home/jack/myscript.sh
そうでない場合は、(エラーが発生しない限り)常に指定されたユーザーに切り替えて、独自のポリシー(特にほとんどのシステムではPAMポリシー)に準拠するか、またはをsu
使用してくださいsudo
。start-stop-daemon
su
sudo
あなたの場合は中間スクリプトは必要ありません。 Upstart サービス定義で直接環境変数を設定できます。
description "Myapp Server"
start on runlevel [2345]
stop on runlevel [06]
respawn
respawn limit 10 5
env JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.26/
exec /home/jack/myapp/apache-tomcat-6.0.32/bin/catalina.sh run
答え2
Upstart 1.4以降、Upstartには、setuid
スタンザを使用してsetgid
指定されたユーザーでシステムタスクを実行する機能があります。たとえば、次のようになります。
setuid username
setgid groupname
以前のバージョンでは、次のものが利用できました。ユーザーの場所、ユーザーのホームフォルダに保存されます。
または、execコマンドでいくつかのアプリケーションを使用してください。
可能な場合start-stop-daemon
:
exec start-stop-daemon --start -c myuser --exec command
そしてsudo
:
exec sudo -u myuser command
そしてsu
:
exec su -s /bin/sh -c 'exec "$0" "$@"' myuser -- command [parameters...]
追加情報ここ
答え3
セッションユーザーとして実行するにはセッションの割り当て(1.7以降)システム作業の代わりに。これらの操作は、環境変数に関してシステム操作のように制限されず、セッションユーザーとして実行されます。