
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_USER
weil ich möchte, dass Mule als Benutzer ausgeführt wird mule
.
Wenn ich anrufe, sudo service mule start
sehe 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 su
irgendwie von der Umgebung abhängt.
Antwort1
Das Problem bestand darin, dass der Benutzer mule
keine Shell hatte. Diese war auf eingestellt /bin/false
.
Das -m
Flag für su
bewahrt die Umgebung, sodass bei meinem Aufruf sudo /etc/init.d/mule start
die SHELL
Umgebungsvariable gesetzt und an weitergegeben wurde su
.
Aber beim Aufruf sudo service mule start
wird die Umgebung bereinigt. Aus service
der 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 SHELL
Variable und der Benutzer mule
hat auch keine Shell. Es scheint also, dass kein Befehl ausgeführt wird.