サービスユーティリティを使用するとサービスは起動しませんが、initスクリプトを直接呼び出すと動作します

サービスユーティリティを使用するとサービスは起動しませんが、initスクリプトを直接呼び出すと動作します

走ろうとしているラバ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

のフラグ-msu環境を保存するので、 を呼び出すとsudo /etc/init.d/mule start環境SHELL変数が設定され、 に渡されますsu

しかし、呼び出すとsudo service mule start環境はクリーンアップされます。manserviceページから:

サービスは、ほとんどの環境変数を削除し、現在の作業ディレクトリを / に設定して、可能な限り予測可能な環境で System V init スクリプトまたは upstart ジョブを実行します。

したがって、環境には変数が含まれずSHELL、ユーザーにはmuleシェルもありません。そのため、コマンドは実行されないようです。

関連情報