我正在开发一个守护程序脚本,它使用python-daemon包启动一个瓶子应用程序。该脚本是/etc/init.d/app.sh
在/ etc / environment中设置了一些环境变量,这些变量将在应用程序的settings.py文件(os.environ)中使用。
一旦我激活virtualenv,就会删除所有系统环境变量(包括我在/ etc / environment中设置的变量)。
我正在使用的init脚本是
. /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中定义的变量的正确方法。
答案 0 :(得分:0)
尝试将以下内容添加到/etc/init.d/app.sh
脚本的顶部:
source /etc/environment
当您使用init脚本启动应用程序时,python应该会看到/etc/environment
中设置的任何和所有环境变量。
答案 1 :(得分: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
答案 2 :(得分:0)
以下链接提供了有趣的修复方法。我将在某种程度上修改我的应用程序以使其正常工作
https://unix.stackexchange.com/questions/44370/how-to-make-unix-service-see-environment-variables