
我正在嘗試奔跑騾子在 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。所以看起來沒有執行任何指令。