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