2017-04-04 20 views
0

サービススクリプトを起動すると./scriptがプロキシ経由で資格情報を取得できるようになりました(環境変数が見つかりました)。プロキシ経由の資格情報(環境変数が見つかりません)、プロキシが見つかりませんでした。どのように私はサービススクリプトの開始を通してこのスクリプトを動作させることができますか?サービス起動スクリプトの実行中に環境変数がロードされない

スクリプト:

#!/bin/bash -l 
# chkconfig: 2345 20 80 

if [ "$system" = "redhat" ]; then 
    ## source platform specific external scripts 
    . /etc/init.d/functions 
    ## set or override platform specific variables 
    lockfile=${LOCKFILE-/var/lock/subsys/$SERVICE_NAME} 

    ## set or override platform specific functions 
    start_daemon() { 
     daemon --user $1 --pidfile $2 "$3 $4" 
    } 
    log_daemon_msg() { 
     echo -n $"$1" 
    } 
    echo_ok() { 
     echo_success; echo 
    } 
    echo_fail() { 
     echo_failure; echo 
    } 
    log_success_msg() { 
     success $"[email protected]" 
    } 
    log_failure_msg() { 
     failure $"[email protected]" 
     echo $"[email protected]" 
    } 
    log_action_msg() { 
     echo [email protected] 
    } 
fi 

if [ -n "$http_proxy" ] ; then 
    echo "proxy found" 
    echo $http_proxy | grep "@" 
    if [ $? -eq 0 ]; then 
     PROXY_HOST=$(echo $http_proxy | sed 's/http:\/\/.*@\(.*\):.*/\1/') 
     PROXY_PORT=$(echo $http_proxy | sed 's/http:\/\/.*@.*:\(.*\)/\1/' | tr -d "/") 
     USERNAME=$(echo $http_proxy | sed 's/http:\/\/\(.*\)@.*/\1/'|awk -F: '{print $1}') 
     PASSWORD=$(echo $http_proxy | sed 's/http:\/\/\(.*\)@.*/\1/'|awk -F: '{print $2}') 
    else 
     PROXY_HOST=$(echo $http_proxy | sed 's/http:\/\/\(.*\):.*/\1/') 
     PROXY_PORT=$(echo $http_proxy | sed 's/http:\/\/.*:\(.*\)/\1/' | tr -d "/") 
    fi 
fi 

start() { 

     echo "Starting $SERVICE_NAME ..." 
     if [ ! -f $PID_PATH_NAME ]; then 
      CMD="java " 
      if [ -n "$PROXY_HOST" -a -n "$PROXY_PORT" ] ; then 
       CMD="java -Dhttps.proxyHost=$PROXY_HOST -Dhttps.proxyPort=$PROXY_PORT" 
       if [ -n "$USERNAME" -a -n "$PASSWORD" ]; then 
       CMD="$CMD -Dhttps.proxyUser=$USERNAME -Dhttps.proxyPassword=$PASSWORD" 
       fi 
      fi 
      #nohup $CMD -jar $PATH_TO_JAR /tmp 2>> /dev/null >> /dev/null & 
      #echo "$PATH_TO_JAR" 
      echo "$CMD" 
      nohup $CMD -jar $PATH_TO_JAR 2>> /tmp/glog >> /tmp/glog & 
      echo $! > $PID_PATH_NAME 

      echo "$SERVICE_NAME started ..." 
     else 
      echo "$SERVICE_NAME is already running ..." 
     fi 
    } 
case "$1" in 
    start) 
     start 
     ;; 
*) 
     echo "Usage: $0 {start|stop|status|restart}" 
esac 

exit 0 

私は、./scriptスタートのようなこのスクリプトを実行しているプロキシ設定を見つけることができるスクリプトおよびプロキシ設定を渡しています。しかし、サービススクリプトで実行している間は、プロキシ設定を見つけることができません。サービスでスクリプトを実行しているときに、環境変数をロードするのに何かが必要でしたか? man serviceから

答えて

1

サービスは、ほとんどの環境変数を削除し、/に設定された現在の作業ディレクトリで、できるだけ予測可能な環境で、System Vのinitスクリプトを実行します。あなたはサービススクリプトを実行しようとするので、TERMLANG遺跡のような唯一のいくつかのenv変数は、あなたのhttp_proxyhttps_proxyが破棄され

。あなたのスクリプトの先頭に

http_proxy=http://yourproxy.com 
https_proxy=http://yourproxy.com 

sourceそれ:あなたが必要とする環境変数を使用するには、あなたがファイル/etc/default/yourserviceでそれらを定義することができ

[ -f /etc/default/yourservice ] && . /etc/default/yourservice 
関連する問題