
走ろうとしているラバUbuntu 14.04でサービスとして起動します。次のinitスクリプトを作成しました(/etc/init.d/mule
)
#!/bin/bash
JAVA_HOME=/usr/lib/jvm/java-8-oracle
PATH=$PATH:$JAVA_HOME/bin
# Set Mule related environment
MULE_HOME=/opt/mule
PATH=$PATH:$MULE_HOME/bin
RUN_AS_USER=mule
# Export environment variables
export JAVA_HOME MULE_HOME RUN_AS_USER PATH
# Invoke Mule
$MULE_HOME/bin/mule $1
RUN_AS_USER
ここでは、Mule をユーザーとして実行したいので、いくつかの環境変数を定義しますmule
。
呼び出してもsudo service mule start
何も起こらないように見えますが、 を呼び出すとsudo /etc/init.d/mule start
、Mule は正常に実行を開始します。
を見て起動スクリプトMule の場合、別のユーザーとして実行する必要がある場合、419 行目でスクリプトが再起動されます。
RELAUNCH_CMD="$REALPATH $@"
su -m $RUN_AS_USER -c "$RELAUNCH_CMD"
init スクリプトを直接呼び出すと Mule は正常に実行を開始するのに、service ユーティリティを使用すると何も起こらないのはなぜでしょうか。service のマニュアル ページには、ほとんどの環境変数が削除されると書かれています。そのため、呼び出しはsu
何らかの形で環境に依存しているのではないかと推測しています。
答え1
問題は、ユーザーにmule
シェルがなかったことです。 に設定されていました/bin/false
。
のフラグ-m
はsu
環境を保存するので、 を呼び出すとsudo /etc/init.d/mule start
環境SHELL
変数が設定され、 に渡されますsu
。
しかし、呼び出すとsudo service mule start
環境はクリーンアップされます。manservice
ページから:
サービスは、ほとんどの環境変数を削除し、現在の作業ディレクトリを / に設定して、可能な限り予測可能な環境で System V init スクリプトまたは upstart ジョブを実行します。
したがって、環境には変数が含まれずSHELL
、ユーザーにはmule
シェルもありません。そのため、コマンドは実行されないようです。