서비스 유틸리티를 사용하면 서비스가 시작되지 않지만 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_USERMule을 user 로 실행하기를 원하기 때문입니다 mule.

내가 전화하면 sudo service mule start아무 일도 일어나지 않지만 전화하면 sudo /etc/init.d/mule startMule이 정상적으로 작동하기 시작합니다.

을 보면서시작 스크립트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에게도 쉘이 없습니다. 따라서 명령이 실행되지 않는 것 같습니다.

관련 정보