Служба не запускается при использовании служебной утилиты, но работает при прямом вызове сценария инициализации

Служба не запускается при использовании служебной утилиты, но работает при прямом вызове сценария инициализации

Я пытаюсь бежать.Мулна 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 запускался от имени пользователя 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 или задание upstart в максимально предсказуемой среде, удаляя большинство переменных среды и устанавливая текущий рабочий каталог на /.

Следовательно, среда не содержит SHELLпеременной, а у пользователя muleтакже нет оболочки. Так что, похоже, никакая команда не выполняется.

Связанный контент