web-dev-qa-db-ja.com

UNIXサービスに環境変数を表示させる方法は?

/etc/profileを使用して環境変数を設定しました:

export VAR=/home/userhome

次に、echo $VARを実行すると、/home/userhomeが表示されます

しかし、この変数への参照を/etc/init.d/servicenameファイルに入れると、この変数が見つかりません。次の内容のservice servicename statusファイルを使用して/etc/init.d/servicenameを実行すると、

case "$1" in
status)    
    cd $VAR/dir
    ;;
esac

/dir: No such file or directory

しかし、/etc/init.d/servicename statusの代わりにservice servicename statusを実行すれば機能します

UNIXサービスに環境変数を表示させるにはどうすればよいですか?

52
altern

問題は、serviceTERMPATHおよびLANG以外のすべての環境変数を取り除くことです。これは良いことです。スクリプトを直接実行している場合、環境変数は削除されないため、すべてが機能します。

起動時に環境変数がおそらく存在せず、initシステムがおそらくそれを設定しないため、外部環境変数に依存したくありません。

それでもそのような変数に依存したい場合は、ファイルを入手し、そこから変数を読み取ります。作成/etc/default/servicename内容:

VAR=value

そしてあなたのinitスクリプトからそれを調達します、例えば:

[ -f /etc/default/service-name ] && . /etc/default/service-name

if [ -z "$VAR" ] ;  then
  echo "VAR is not set, please set it in /etc/default/service-name" >&2
  exit 1
fi

case "$1" in
status)    
    cd "$VAR"/dir
    ;;
esac
70
Ulrich Dangel

私の場合、_Rails_ENV_に設定された_/etc/bash.bashrc_が必要でした:_export Rails_ENV=staging_。 $(grep Rails_ENV /etc/bash.bashrc)を追加すると、スクリプトで変数を使用できるようになります。この方法で行ったので、ファイルの残りの部分を含める必要はありませんでした。

1
geermc4