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

Я пытаюсь запустить Mule на 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,

Когда я звоню sudo service mule start Я ничего не вижу, но при звонке sudo /etc/init.d/mule startМул начинает нормально бегать.

Рассматривая сценарий запуска для Mule, в строке 419 сценарий перезапускается, если его необходимо запустить от имени другого пользователя.

RELAUNCH_CMD="$REALPATH $@"
su -m $RUN_AS_USER -c "$RELAUNCH_CMD"

Почему при непосредственном вызове сценария инициализации Mule запускается нормально, но при использовании служебной утилиты ничего не происходит? Страница man для службы говорит, что она удаляет большинство переменных окружения. Я предполагаю, что звоню 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 также не имеет оболочки. Так что никакая команда не выполняется, кажется.

Другие вопросы по тегам