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