簡體   English   中英

在Python virtualenv中使用/ etc / environment

[英]Using /etc/environment in Python virtualenv

我正在研究一個使用python-daemon軟件包啟動Bottle應用程序的守護程序腳本。 腳本是/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中定義的變量的正確方法。

嘗試將以下內容添加到/etc/init.d/app.sh腳本的頂部:

source /etc/environment

然后,當您使用init腳本啟動應用程序時,python應該可以看到/etc/environment設置的所有環境變量。

激活腳本沒什么特別的,它只是修改您的路徑。 您可以在啟動器中實現相同的目的:

. /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

下面的鏈接提供了有趣的修復。 我將在某種程度上修改我的應用程序以使其正常運行

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM