
나는 달리려고 노력하고있다.노새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"
init 스크립트를 직접 호출하면 Mule이 정상적으로 실행되기 시작하지만 서비스 유틸리티를 사용할 때는 아무 일도 일어나지 않는 이유는 무엇입니까? 서비스 매뉴얼 페이지에는 대부분의 환경 변수가 제거된다고 나와 있습니다. 그래서 su
어떻게든 환경에 따라 호출이 달라지는 것 같아요 .
답변1
문제는 사용자에게 mule
쉘이 없다는 것입니다. 으로 설정되었습니다 /bin/false
.
-m
에 대한 플래그는 환경 su
을 보존하므로 호출할 때 sudo /etc/init.d/mule start
환경 SHELL
변수가 설정되어 su
.
그러나 호출하면 sudo service mule start
환경이 깨끗해집니다. service
매뉴얼 페이지 에서 :
서비스는 가능한 한 예측 가능한 환경에서 System V init 스크립트 또는 시작 작업을 실행하여 대부분의 환경 변수를 제거하고 현재 작업 디렉터리를 /로 설정합니다.
따라서 환경에는 SHELL
변수가 포함되어 있지 않으며 사용자 mule
에게도 쉘이 없습니다. 따라서 명령이 실행되지 않는 것 같습니다.