Ich verursache ein Linux (AWS Linux) Startup-Dienst ausführen eine Jar-Datei in /etc/init.d abgeholt. Es ist im Grunde ein Maven-Projekt mit Spring-Boot. Ich Jar-Datei zunächst erzeugen durch sudo läuft -E ./mvnw sauber Paket und dann einen Dienst starten, die die JAR-Datei für immer als Dienst ausgeführt. Diese Jar-Datei wird als Daemon-Service ausgeführt. Jedoch wird keine der Umgebungsvariablen aus dem Dienst ausgewählt, und für diese Variablen werde ich tatsächlich null. Ich setze meine Umgebungsvariablen in ~/.profile und später laufe ich Source ~/.profile. Ich kann alle Umgebungsvariablen sieht gepflückt zu werden, wenn ich Java -jar direkt im Projektpfad osuserver.jar aber Wenn ich das gleiches wie der Dienst ausgeführt wird, ist es nicht in der Lage pickup Umgebungsvariablen.Umgebungsvariablen nicht, die in Linux-Service
Sequenz: Zuerst habe ich die Umgebungsvariablen in ~/.profile -> run source ~/.profile -> Ich erstelle Jar-Datei durch Ausführen von Maven-Paket - sudo -E./mvnw sauberes Paket -> später Ich werde den Dienst starten (sudo service Osuserver start).
Ich habe sogar versucht Sudo -E-Service geben osuserver starten, aber es hat nicht geholfen und ich habe noch Nullwerte für Umgebungsvariablen bekam. Hier
ist die Syntax meiner OSU Start-Skript, das ich bin Speichern in init.d
#!/bin/sh
# chkconfig: 35 99 10
SERVICE_NAME=osuserver
PATH_TO_JAR=/home/ec2-user/osuserver/target/osu-server-0.1.0.jar
PID_PATH_NAME=/tmp/osuserver-pid
case $1 in
start)
echo "Starting $SERVICE_NAME ..."
if [ ! -f $PID_PATH_NAME ]; then
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
touch /var/lock/subsys/osuserver
else
echo "$SERVICE_NAME is already running ..."
touch /var/lock/subsys/osuserver
fi
;;
stop)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stoping ..."
kill $PID;
echo "$SERVICE_NAME stopped ..."
rm $PID_PATH_NAME
rm -f /var/lock/subsys/osuserver
else
echo "$SERVICE_NAME is not running ..."
rm -f /var/lock/subsys/osuserver
fi
;;
restart)
if [ -f $PID_PATH_NAME ]; then
PID=$(cat $PID_PATH_NAME);
echo "$SERVICE_NAME stopping ...";
kill $PID;
echo "$SERVICE_NAME stopped ...";
rm $PID_PATH_NAME
echo "$SERVICE_NAME starting ..."
nohup java -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null &
echo $! > $PID_PATH_NAME
echo "$SERVICE_NAME started ..."
else
echo "$SERVICE_NAME is not running ..."
fi
;;
esac
Also im Grunde ist konkrete Anwendung mit Service läuft, aber das einzige Problem ist, mit Abholung die Umgebungsvariablen.So muss ich die Umgebungsvariablen direkt aus dem Dienst setzen ?. Ich bin mir nicht sicher, wo ich falsch liege.
---- >>>>>> bearbeiten mein Beitrag < < < < < < < < ---
Ich schrieb ein Skript, das osuscript.sh unter /etc/profile.d schaffen die hat den ganzen Export von Umgebungsvariablen, aber immer noch das gleiche Problem. Allerdings gleiche funktioniert, wenn ich Java -jar direkt im Projektpfad osuserver.jar
Skripte, die von init.d gestartet werden, werden nicht als interaktive Shells ausgeführt, sodass sie kein Profil erstellen. –
Ich erstelle das Profil manuell, aber der Daemon-Dienst wählt es nicht aus. –