2017-02-28 20 views
0

我正在創建Linux(AWS Linux)啓動服務以在/etc/init.d中運行Jar文件。這基本上是一個使用Spring引導的maven項目。我最初通過運行sudo -E ./mvnw clean包生成Jar文件,然後啓動一個永久運行Jar文件的服務作爲服務。該Jar文件將作爲守護程序服務運行。然而,沒有任何環境變量正在從服務中挑選出來,而我實際上對於這些變量而言是空的。我在〜/ .profile中設置我的環境變量,然後運行source〜/ .profile。如果我直接在項目路徑中運行Java -jar osuserver.jar,則可以看到所有環境變量被選中,但如果我運行與服務相同的操作,則無法獲取環境變量。我首先在〜/ .profile中設置環境變量 - >運行source〜/ .profile - >我通過運行maven包創建Jar文件 - sudo -E ./mvnw clean package - > later我將開始服務(sudo服務Osuserver啓動)。在Linux服務中未採集環境變量

我甚至嘗試給Sudo -E服務osuserver啓動,但它沒有幫助,我仍然得到空值的環境變量。

這裏是我的OSU啓動腳本中,我在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

所以基本上應用與服務,但唯一的問題正常運行是撿環境變量。所以我需要直接從服務中設置環境變量嗎?我不知道我哪裏出錯了。

---- >>>>>>編輯我的帖子< < < < < < < < ---

我寫了一個腳本,將在/etc/profile.d中創建osuscript.sh這具有環境變量的所有輸出,但仍面臨同樣的問題。但是,如果我直接在項目路徑中運行Java -jar osuserver.jar,則工作正常。

+0

由init.d啓動的腳本不會作爲交互式shell執行,因此它們不會生成配置文件。 –

+0

我正在手動採集配置文件,但守護程序服務未選擇它。 –

回答

0

/etc/init.d下的守護進程腳本主要以root用戶身份運行,其中一些腳本可以在系統引導時自動啓動。守護進程是單例,意味着一個守護進程腳本控制一個守護進程服務(啓動/停止/狀態/重新啓動)。

~/.profile中的環境是個人配置,而不是系統。您應該在/etc文件夾下放置環境,並將source命令添加到守護程序腳本以讀取環境。

+0

那麼應該直接在/ etc下面指定文件名?我甚至嘗試在/etc/profile.d下放置scripts.sh(包含環境變量的導出),但它沒有幫助。即使它工作正常,如果我直接在項目路徑 –

+0

中運行Java -jar osuserver.jar謝謝我現在正在獲取環境變量。我從守護進程腳本中找到它。我在下面添加了一行,它將編寫我編寫的用於在守護進程腳本中導出Env變量的腳本source /home/ec2-user/osuserver/scripts/osuscript.sh –