/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サービスに環境変数を表示させるにはどうすればよいですか?
問題は、service
がTERM
、PATH
および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
私の場合、_Rails_ENV
_に設定された_/etc/bash.bashrc
_が必要でした:_export Rails_ENV=staging
_。 $(grep Rails_ENV /etc/bash.bashrc)
を追加すると、スクリプトで変数を使用できるようになります。この方法で行ったので、ファイルの残りの部分を含める必要はありませんでした。