1

我正在开发一个使用 python-daemon 包启动瓶子应用程序的守护程序脚本。脚本是 /etc/init.d/app.sh

在 /etc/environment 中设置了一些环境变量,这些变量将在应用程序的 settings.py 文件 (os.environ) 中使用。

一旦我激活 virtualenv,所有系统环境变量都会被删除(包括我在 /etc/environment 中设置的那些)。

我正在使用的初始化脚本是

. /root/webapps/myapp/bin/activate

case "$1" in
    start)
    echo "Starting server"
    # Start the daemon 
    python /root/webapps/myapp/project/index.py start
    ;;
stop)
    echo "Stopping server"
    # Stop the daemon
    python /root/webapps/myapp/project/index.py stop
    ;;
restart)
    echo "Restarting server"
    python /root/webapps/myapp/project/index.py restart
    ;;
*)
    # Refuse to do other stuff
    echo "Usage: /etc/init.d/app {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

此外,当我检查我在 ipython shell 的 /etc/environment 中定义的环境变量时,变量显示正常。只有当我尝试使用 init 脚本启动应用程序时,一切都变为空白。

我正在寻找的是在 virtualenv 中的应用程序中使用 /etc/environment 中定义的变量的正确方法。

4

3 回答 3

0

激活脚本没什么特别的,它只是修改了你的路径。您可以在启动器中实现相同的功能:

. /etc/environment
export PATH=/root/webapps/myapp/bin:$PATH
export VENV_BIN=/root/webapps/myapp/bin
export PROJECT_ROOT=/root/webapps/myapp/project

case "" in
    start)
    echo "Starting server"
    # Start the daemon 
    $VENV_BIN/python $PROJECT_ROOT/index.py start
    ;;
stop)
    echo "Stopping server"
    # Stop the daemon
    $VENV_BIN/python $PROJECT_ROOT/index.py stop
    ;;
restart)
    echo "Restarting server"
    $VENV_BIN/python $PROJECT_ROOT/index.py restart
    ;;
*)
    # Refuse to do other stuff
    echo "Usage: /etc/init.d/app {start|stop|restart}"
    exit 1
    ;;
esac

exit 0
于 2013-12-30T04:52:29.423 回答
0

下面的链接提供了有趣的修复。我将在某种程度上修改我的应用程序以使其正常工作

https://unix.stackexchange.com/questions/44370/how-to-make-unix-service-see-environment-variables

于 2013-12-30T05:19:41.800 回答
0

尝试将以下内容添加到/etc/init.d/app.sh脚本的顶部:

source /etc/environment

/etc/environment然后,当您使用 init 脚本启动应用程序时,python 应该可以看到所有设置的环境变量。

于 2013-12-30T04:29:33.173 回答