主管 - 启动django应用程序并通过bash文件保持运行

时间:2014-06-14 01:25:03

标签: python django bash supervisord supervisor

我基本上都是按照标题所说的那样做 - 让django应用程序运行,即使在服务器重启时也是如此。

我遵循了一些教程,但没有成功让主管为我处理这项任务。

我目前在conf有一个名为MyConf.conf的{​​{1}},如下所示:

/etc/supervisor/conf.d

gunicorn_start.bash

[program:MyConf]
command = /home/user/virtualenv/gunicorn_start.bash                                                         ; Command to start app
autostart=true                                                                                          ; start app when system starts
autorestart=true                                                                                        ; defines how app starts in event app exits
user=vanew                                                                                              ; User to run as
stdout_logfile=/home/user/virtualenv/nginxConfiguration/error/gunicorn_supervisor.log                  ; Where to write log messages
stderr_logfile=/home/user/virtualenv/nginxConfiguration/error/gunicorn_supervisor_error.log            ; Where to write log error messages
redirect_stderr = true  

当我运行以下命令时,它在 #!/bin/bash NAME="myapp" # Name of the application DJANGODIR=/home/useros/virtualenv/MyConf/myapp # Django project directory #SOCKFILE=/webapps/hello_django/run/gunicorn.sock # we will communicte using this unix socket USER=user # the user to run as GROUP=user # the group to run as NUM_WORKERS=5 # how many worker processes should Gunicorn DJANGO_SETTINGS_MODULE=MyConf.settings # which settings file should Django use DJANGO_WSGI_MODULE=MyConf.wsgi # WSGI module name echo "Starting $NAME" # Activate the virtual environment cd $DJANGODIR source ../../bin/activate export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGODIR:$PYTHONPATH # Create the run directory if it doesn't exist RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR # Start your Django Unicorn # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) exec /usr/local/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \ --name $NAME \ --workers $NUM_WORKERS \ --user=$USER --group=$GROUP \ --log-level=debug \ --bind=unix:$SOCKFILE 文件中不断给出以下错误:stdout_logfile

sudo supervisorctl start MyConf

注意:Starting myapp dirname: missing operand Try 'dirname --help' for more information. 2014-06-14 01:20:15 [3698] [INFO] Starting gunicorn 18.0 Traceback (most recent call last): File "/usr/local/bin/gunicorn", line 9, in <module> load_entry_point('gunicorn==18.0', 'console_scripts', 'gunicorn')() File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 71, in run WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run() File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 143, in run Arbiter(self).run() File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 172, in run self.start() File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 134, in start self.LISTENERS = create_sockets(self.cfg, self.log) File "/usr/local/lib/python2.7/dist-packages/gunicorn/sock.py", line 198, in create_sockets sock = sock_type(addr, conf, log) File "/usr/local/lib/python2.7/dist-packages/gunicorn/sock.py", line 102, in __init__ super(UnixSocket, self).__init__(addr, conf, log, fd=fd) File "/usr/local/lib/python2.7/dist-packages/gunicorn/sock.py", line 31, in __init__ self.sock = self.set_options(sock, bound=(fd is not None)) File "/usr/local/lib/python2.7/dist-packages/gunicorn/sock.py", line 42, in set_options self.bind(sock) File "/usr/local/lib/python2.7/dist-packages/gunicorn/sock.py", line 110, in bind util.chown(self.cfg_addr, self.conf.uid, self.conf.gid) File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 157, in chown os.chown(path, uid, gid) OSError: [Errno 2] No such file or directory: '' 已通过gunicorn_start.bash

生成

显然它无法找到文件或目录,为了什么?我该如何解决这个问题?

谢谢

1 个答案:

答案 0 :(得分:1)

为什么不使用supervisor配置来设置所有内容?在您的主管conf中似乎缺少directory的值:

[program:gunicorn]
directory=/home/useros/virtualenv/MyConf
command=/home/useros/virtualenvs/MyConf/bin/python manage.py run_gunicorn -b unix:/tmp/gunicorn.sock

numprocs=4

user=vanew
autostart=true
autorestart=true

process_name=%(program_name)s_%(process_num)s
stdout_logfile=/var/log/supervisor/%(program_name)s_%(process_num)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s_%(process_num)s.err