Как загрузить переменные окружения во время загрузки до X11 в Ubuntu Precise?
Используя Ubuntu Precise 64 bit, я столкнулся с проблемой, которую не могу решить и которую я попытаюсь описать ниже:
Я использую программу в режиме консоли (скажем, abc), которая использует Go, NodeJS, Java и Scala.
Чтобы abc работал с этими языками, я должен объявить следующие утверждения:
а) в / 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
б) в /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
в) а) в / etc / sudoers:
`# env_reset
По умолчанию secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin"`
Затем, когда я запускаю abc из терминала, все в порядке, и я могу использовать любой из 4 языков, описанных выше.
Тем не менее, если я помещу скрипт в /etc/init.d, который запускает abc во время процесса загрузки (т. Е. Перед запуском GUI), использование Java из abc по-прежнему нормально, но использование Go, NodeJS или Scala больше не работает.,
Затем, я предполагаю, что во время процесса загрузки скрипт в /etc/init.d, который запускает abc, выполняется до того, как будут загружены различные переменные окружения, установленные в / etc / sudoers, / etc / environment и /etc/login.defs.,
Итак, мой вопрос: как заставить переменные среды загружаться до того, как мой скрипт, запускающий abc, запускается?
Любая помощь и советы по этой теме будут с благодарностью.
ТИА. Приветствия.
Еще раз спасибо Марку и Даниле.
Ниже приведен модифицированный файл сценария abc, который я поместил в /etc/init.d
#!/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) я получаю следующие сообщения об ошибках:
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 для объяснения, как исправить этот скрипт.
Приветствия.;)
1 ответ
Хорошо, я думаю, что нашел проблему: никогда не используйте двойные кавычки (") для 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
:
Спасибо за вашу помощь.
Надеюсь, что это может помочь другим.
Приветствия.;)