【发布时间】:2012-03-12 09:47:14
【问题描述】:
我一直在努力阅读文档和示例,让我的 Django 在 upstart 中运行,这样我就可以让它一直运行,但我做不到。
这是我位于/etc/init/myapp.conf 的新贵配置文件:
start on startup
#expect daemon
#respawn
console output
script
chdir /app/env/bin
exec source activate
exec /app/env/bin/python /app/src/manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &
end script
当我输入sudo service myapp start 时,控制台说它已经启动,但似乎没有运行。
是否可以通过查看一些调试输出来了解问题所在?
我需要以另一个用户身份运行我的 Django 应用程序——即djangouser。我该怎么做?
(我一直在注释掉一些行来测试服务出错的地方)。这不是用于生产用途,但仅供我内部开发使用。
谢谢。
编辑#1:
我已将我的两个命令都打包成一个简单的脚本,地址为/app/run.sh
#!/bin/bash
cd /app/env/bin
source activate
cd /app/src
python manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &
..我已将 /etc/init/myapp.conf 修改为
start on startup
expect daemon
exec su - djangouser -c "bash /app/run.sh"
执行sudo service myapp start 时——应用程序启动但PID 错误,我似乎无法用sudo service myapp stop 杀死它
有什么想法吗?
【问题讨论】:
-
exec参数可能应该是/app/env/bin/python manage.py runserver 0.0.0.0:8000 > /dev/null 2>&1 &。 -
您好 Jkbr,我已经使用了您的解决方案并添加了 python 二进制文件的完整路径。我重新启动了我的系统,它不再等待
CRTL ^ C。现在它只是说任务已启动,但我似乎找不到它正在运行。我可以以某种方式查看控制台输出吗?谢谢 -
我尝试了
source activate和bash script两种方式,仍然可以启动或停止。我正在尝试cherrypy而不是django,但应该是一样的。 Virtualenv、sudo/su - 任何帮助都会很棒 -
源在 /bin/sh 环境中不存在,使用 "."反而。检查 /var/log/upstart/myapp.log,您应该会看到“/bin/sh: 1: source: not found”。
-
@MridangAgarwalla 您是否设法找出如何使用 myapp stop 杀死它?我遇到了同样的问题,停止挂起。
标签: django linux ubuntu virtualenv upstart