2017-02-28 1 views
0

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

+0

Skripte, die von init.d gestartet werden, werden nicht als interaktive Shells ausgeführt, sodass sie kein Profil erstellen. –

+0

Ich erstelle das Profil manuell, aber der Daemon-Dienst wählt es nicht aus. –

Antwort

0

Daemon Skript unter /etc/init.d meist als Root-Benutzer ausgeführt wird, können einige von ihnen beim Systemstart Autostart erfolgen. Daemon sind Singleton, dh ein Daemon-Skript steuert einen Daemon-Dienst (Start/Stop/Status/Neustart).

Umwelt in ~/.profile ist die persönliche Konfiguration, nicht System. Sie sollten Umgebung unter /etc Ordner abgelegt und source Befehl Daemon Skript fügen Sie die Umgebungen zu lesen.

+0

Also was soll der Dateiname direkt unter/etc sein? Ich habe sogar versucht, scripts.sh (enthält Export von Umgebungsvariablen) unter /etc/profile.d, aber es hat nicht geholfen. Obwohl es funktioniert, wenn ich Java-jar osuserver.jar direkt im Projektpfad ausführen –

+0

Vielen Dank Ich bekomme jetzt Umgebungsvariablen. Ich erstelle es aus dem Daemon-Skript. Ich habe unterhalb der Zeile hinzugefügt, die das Skript, das ich geschrieben habe, um Env-Variablen in das Daemon-Skript Quelle /home/ec2-user/osuserver/scripts/osuscript.sh zu exportieren –