Der Dienst startet nicht, wenn das Service-Dienstprogramm verwendet wird, funktioniert aber, wenn das Init-Skript direkt aufgerufen wird

Der Dienst startet nicht, wenn das Service-Dienstprogramm verwendet wird, funktioniert aber, wenn das Init-Skript direkt aufgerufen wird

Ich versuche zu rennenMaultierauf Ubuntu 14.04 als Dienst. Ich habe das folgende Init-Skript erstellt ( /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

Hier definiere ich einige Umgebungsvariablen, vor allem, RUN_AS_USERweil ich möchte, dass Mule als Benutzer ausgeführt wird mule.

Wenn ich anrufe, sudo service mule startsehe ich, dass nichts passiert, aber wenn ich anrufe sudo /etc/init.d/mule start, läuft Mule einwandfrei.

Mit Blick auf dieStartskriptFür Mule wird das Skript in Zeile 419 neu gestartet, wenn es als anderer Benutzer ausgeführt werden muss.

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

Warum läuft Mule einwandfrei, wenn ich das Init-Skript direkt aufrufe, aber wenn ich das Service-Dienstprogramm verwende, passiert nichts? Auf der Manpage für Service steht, dass die meisten Umgebungsvariablen entfernt werden. Ich vermute also, dass der Aufruf suirgendwie von der Umgebung abhängt.

Antwort1

Das Problem bestand darin, dass der Benutzer mulekeine Shell hatte. Diese war auf eingestellt /bin/false.

Das -mFlag für subewahrt die Umgebung, sodass bei meinem Aufruf sudo /etc/init.d/mule startdie SHELLUmgebungsvariable gesetzt und an weitergegeben wurde su.

Aber beim Aufruf sudo service mule startwird die Umgebung bereinigt. Aus serviceder Manpage:

Der Dienst führt ein System-V-Init-Skript oder einen Upstart-Job in einer möglichst vorhersehbaren Umgebung aus, wobei die meisten Umgebungsvariablen entfernt werden und das aktuelle Arbeitsverzeichnis auf / eingestellt ist.

Daher enthält die Umgebung keine SHELLVariable und der Benutzer mulehat auch keine Shell. Es scheint also, dass kein Befehl ausgeführt wird.

verwandte Informationen