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

Я пытаюсь запустить 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 как-то зависит от окружающей среды.

0
задан 24 November 2015 в 14:27

1 ответ

Проблема состояла в том, что у пользователя mule не было оболочки. Это было установлено на /bin/false.

Эти -m флаг для su сохраняет среду, поэтому когда я звонил sudo /etc/init.d/mule start SHELL, переменная среды была установлена и передана к su.

, Но при вызове sudo service mule start среда убрана. От service страница справочника:

услуга работает System V init сценарий или новомодное задание в максимально предсказуемой среде, удаляя большинство переменных среды и с текущим рабочим набором каталога к/.

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

0
ответ дан 25 November 2015 в 00:27
  • 1
    @CatMan Эти gvfs-монтируются , от пакета gvfs-распространены . It' s установленное использование sudo apt install gvfs-common. Вы don' t должны помнить загадочное имя. Просто найдите его в /var/run папка одно время. It' s не как было бы много файлов там. Тогда свяжитесь с ним незагадочным именем. Незагадочное имя - все, что необходимо было бы помнить. Все шаги, которые Вы делаете теперь, создавая пути и конфигурацию, являются загадочными, но как только Вы настраиваете ее однажды, Вы don' t должны помнить все вещи, в которых необходимо ввести как с проблемами you' ре, первоначально имеющее. – L. D. James 15 February 2017 в 07:04

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

Похожие вопросы: