使用服務實用程式時服務不會啟動,但直接呼叫 init 腳本時服務可以運作

使用服務實用程式時服務不會啟動,但直接呼叫 init 腳本時服務可以運作

我正在嘗試奔跑騾子在 Ubuntu 14.04 上作為服務。我創建了以下初始化腳本 ( /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 以 user 身份運行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"

為什麼當直接呼叫初始化腳本時,Mule 開始運作良好,但當使用服務實用程式時,沒有任何反應?服務的手冊頁說它刪除了大多數環境變數。所以我猜測調用su在某種程度上取決於環境。

答案1

問題是使用者mule沒有 shell。它被設定為/bin/false.

標誌-m保留su環境,因此當我調用時,sudo /etc/init.d/mule start環境SHELL變數已設定並傳遞給su.

但調用時sudo service mule start環境就乾淨了。從service手冊頁:

服務在盡可能可預測的環境中執行 System V init 腳本或 upstart 作業,刪除大多數環境變數並將目前工作目錄設為 /。

因此,環境不包含SHELL變量,使用者mule也沒有 shell。所以看起來沒有執行任何指令。

相關內容