web-dev-qa-db-ja.com

Ubuntu PreciseでX11より前の起動時に環境変数をロードする方法は?

Ubuntu Precise 64ビットを使用すると、解決できない問題に直面しているので、以下で説明します。

Go、NodeJS、Java、Scala)を使用するコンソールモードプログラム(たとえばabc)を使用しています。

Abcがこれらの言語で機能するためには、次のステートメントを宣言する必要があります。

a)/ etc/environment内:

PATH =/usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/local/go/bin "CLASSPATH = $ CLASSPATH:/ usr/share /Java/scala-library.jar

b)/etc/login.defs内

ENV_SUPATH PATH =/usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/local/go/bin

ENV_PATH PATH =/usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/local/go/bin

c)a)/ etc/sudoers内:

`#env_reset

デフォルトsecure_path = "/ usr/local/sbin:/ usr/local/bin:/ usr/sbin:/ usr/bin:/ sbin:/ bin:/ usr/local/go/bin" `

次に、ターミナルからabcを起動すると、すべて問題なく、上記の4つの言語のいずれかを使用できます。

ただし、ブートプロセス中(つまりGUIを開始する前)にabcを開始するスクリプトを/etc/init.d内に配置した場合、abcからJavaを使用しても問題ありませんが、Goを使用します。 、NodeJSまたはScalaは機能しなくなりました。

次に、ブートプロセス中に、abcを開始する/etc/init.d内のスクリプトが実行されてから、/ etc/sudoers、/ etc/environment、および/etc/login.defs内に設定されたさまざまな環境変数が読み込まれると思います。 。

だから、私の質問は、abcを開始するスクリプトが起動される前に環境変数を強制的にロードする方法ですか?

このトピックに関するヘルプやアドバイスをいただければ幸いです。

TIA。乾杯。


マークとダニラに改めて感謝します。

以下は、/ etc /init.d内に置いたDanilaの変更された「abc」スクリプトファイルです。


#!/bin/sh

##### EDIT: ADD THIS VARS DEFINITIONS:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" 
CLASSPATH=$CLASSPATH:/usr/share/Java/scala-library.jar
"ENV_SUPATH PATH"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"
"ENV_PATH PATH"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"
"Defaults secure_path"="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"

##### EXPORT this VARS so they are accessible to children:"
export "PATH" "CLASSPATH" "ENV_SUPATH PATH" "ENV_PATH PATH" "Defaults secure_path"

### BEGIN INIT INFO
# Provides:          abc
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: abc initscript
# Description:       This initscript starts and stops abc
### END INIT INFO

# Author: Fnux, fnux.fl at gmail dot com
# Version: 1.2
# Note: (edit ABC_PATH if abc isn't installed in /opt/abc)

NAME=abc
ABC_PATH=/opt/abc
START="-d"
STOP="-k"
VERSION="-v"
SCRIPTNAME=/etc/init.d/$NAME
STARTMESG="\nStarting abc in deamon mode."
UPMESG="\n$NAME is running."
DOWNMESG="\n$NAME is not running."
STATUS=`pidof $NAME`
# Exit if abc is not installed
[ -x "$ABC_PATH/$NAME" ] || exit 0
case "$1" in
  start)
    echo $STARTMESG
    cd $ABC_PATH
    ./$NAME $START
    ;;
  stop)
    cd $ABC_PATH
    ./$NAME $STOP
    ;;
  status)
    if [ "$STATUS" > 0 ] ; then
      echo $UPMESG
    else
      echo $DOWNMESG
    fi
    ;;
  restart)
    cd $ABC_PATH
    ./$NAME $STOP
    echo $STARTMESG
    ./$NAME $START
    ;;
  version)
    cd $ABC_PATH
    ./$NAME $VERSION
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|status|restart|stop|version}" >&2
    exit 3
    ;;
esac
:

このスクリプトを実行すると(つまり、Sudo service abc start)、次のエラーメッセージが表示されます。

fnux@fx8150-1204-3:~$ Sudo service abc start
/etc/init.d/abc: 4: /etc/init.d/abc: ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found
/etc/init.d/abc: 5: /etc/init.d/abc: ENV_PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found
/etc/init.d/abc: 6: /etc/init.d/abc: Defaults secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin: not found
/etc/init.d/abc: 7: export: ENV_SUPATH PATH: bad variable name 
fnux@fx8150-1204-3:~$ 

それで、私はどこが間違っていますか?

このスクリプトを修正する方法の説明については、TIAを参照してください。

乾杯。 ;)

4
Fnux

OK、私は問題を見つけたと思います:VARに二重引用符( ")を使用しないでください。

したがって、以下は正しいスクリプトです。

#!/bin/sh
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin" 
CLASSPATH=$CLASSPATH:/usr/share/Java/scala-library.jar
ENV_SUPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"
ENV_PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"
export PATH CLASSPATH ENV_SUPATH ENV_PATH

### BEGIN INIT INFO
# Provides:          abc
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: abc init script
# Description:       This init script starts and stops abc
### END INIT INFO

# Author: Fnux, fnux.fl at gmail dot com
# Version: 1.2
# Note: edit ABC_PATH if abc isn't installed in /opt/abc

NAME=abc
ABC_PATH=/opt/abc
START="-d"
STOP="-k"
VERSION="-v"
SCRIPTNAME=/etc/init.d/$NAME
STARTMESG="\nStarting abc in deamon mode."
UPMESG="\n$NAME is running."
DOWNMESG="\n$NAME is not running."
STATUS=`pidof $NAME`
# Exit if abc is not installed
[ -x "$ABC_PATH/$NAME" ] || exit 0
case "$1" in
  start)
    echo $STARTMESG
    cd $ABC_PATH
    ./$NAME $START
    ;;
  stop)
    cd $ABC_PATH
    ./$NAME $STOP
    ;;
  status)
    if [ "$STATUS" > 0 ] ; then
      echo $UPMESG
    else
      echo $DOWNMESG
    fi
    ;;
  restart)
    cd $ABC_PATH
    ./$NAME $STOP
    echo $STARTMESG
    ./$NAME $START
    ;;
  version)
    cd $ABC_PATH
    ./$NAME $VERSION
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|status|restart|stop|version}" >&2
    exit 3
    ;;
esac
:

ご協力いただきありがとうございます。

これが他の人に役立つことを願っています。

乾杯。 ;)

1
Fnux