2017-02-28 18 views
0

Linux(AWS Linux)スタートアップサービスを作成して、/ etc/init.dにJarファイルを実行しています。基本的にSpringブートを使用したmavenプロジェクトです。私は最初にsudo -E ./mvnw cleanパッケージを実行してJarファイルを生成し、Jarファイルを永久にサービスとして実行するサービスを開始します。このJARファイルはデーモンサービスとして実行されます。しかし、環境変数のどれもがサービスから選択されておらず、実際にはこれらの変数に対してnullが返されています。 〜/ .profileに環境変数を設定していて、後でsource〜/ .profileを実行します。プロジェクトパスでJava-jar osuserver.jarを直接実行すると、すべての環境変数が選択されているのがわかりますが、サービスと同じように実行すると、環境変数を取得できません。Linuxサービスで環境変数が取得されない

シーケンス:最初に〜/ .profile - > run source〜/ .profile - > mavenパッケージを実行してJarファイルを作成します - sudo -E ./mvnw clean package - > later私はサービスを開始します(sudoサービスOsuserver start)。

私はSudo -Eサービスのosuserverを起動しようとしましたが、それは助けにはならなかったし、環境変数にはまだ値が残っていました。

は、ここで私は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

を保存しています私のOSUの起動スクリプトの構文は、だから、基本的にアプリケーションがサービスで正常に実行されているが、唯一の問題は、ピックアップであります環境変数を設定する必要がありますか?サービスから直接環境変数を設定する必要がありますか?私はどこに間違っているのか分からない。

---- >>>>>> < < < < < < < <私のポストを編集---

私はを/etc/profile.d下osuscript.shを作成するスクリプトを書きました環境変数のすべての輸出を持っていますが、それでも同じ問題に直面しています。しかし、プロジェクトパスでJava-jar osuserver.jarを直接実行すると、同じことが行われます

+0

init.dで起動されたスクリプトは、対話シェルとして実行されないため、プロファイルのソースはありません。 –

+0

私はプロファイルを手動で調達していますが、デーモンサービスはそれを選択していません。 –

答えて

0

/etc/init.d以下のデーモンスクリプトはほとんどがrootユーザーとして実行されますが、システム起動時に自動起動できるものがあります。デーモンはシングルトンであり、デーモンスクリプトは1つのデーモンサービス(start/stop/status/restart)を制御します。

~/.profileの環境はシステムではなく個人的な構成です。環境を読み込むには、/etcフォルダの下に環境を置き、デーモンスクリプトにsourceコマンドを追加する必要があります。

+0

/etcの直下にあるファイル名はどうすればよいでしょうか?私も/etc/profile.dの下にscripts.sh(環境変数のエクスポートを含む)を入れてみましたが、助けにはなりませんでした。プロジェクトパスにJava-jar osuserver.jarを直接実行してもうまく動作しますが、 –

+0

環境変数を取得しています。私はデーモンのスクリプトからそれを調達しています。私は下の行を追加して、デーモンスクリプトのソースにあるEnv変数をエクスポートするために作成したスクリプトをソースにします。/home/ec2-user/osuserver/scripts/osuscript.sh –

関連する問題