Articles of supervisord

优化多个gunicorn实例的工作人员数量

我正在configurationgunicorn(由supervisord监听,并在nginx前端后面),并且对于设置的最佳进程数量感到困惑。 在文件中明确解释说: workers = multiprocessing.cpu_count() * 2 + 1 我的机器是一个四核心,所以应该算9名工人。 但是我想运行几个应用程序,每个应用程序都听一个不同的端口。 那么计数应该(截断): workers_per_application = int(workers / NUM_APPLICATIONS) 还是应该每个人都有上述数量的工人? 我认为这个问题实际上不仅适用于gunicorn,而且适用于所有类似的监听服务器。

在Docker容器中使用进程pipe理器有什么好处?

正如杰罗姆所说, 您还需要添加一个stream程pipe理器; 例如Monit或Supervisor。 这是因为Docker会监视一个进程。 如果你需要多个进程,你需要在顶层添加一个来照顾其他进程。 换句话说,你正在把一个精简而简单的容器变成更加复杂的东西。 我不清楚为什么你需要一个容器内的进程pipe理器。 那么有人可以向我解释一下,在一个容器内部有一个stream程pipe理器有什么好处? 让systemd或新贵来处理stream程,而不是为你的容器增加额外的服务不是更好吗?

在ubuntu 11.04上安装supervisord时出现错误。 有任何解决这个问题的方法吗?

# aptitude install supervisor The following NEW packages will be installed: python-medusa{a} python-meld3{a} supervisor 0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 0 B/290 kB of archives. After unpacking 1,552 kB will be used. Do you want to continue? [Y/n/?] Y Selecting previously deselected package python-medusa. (Reading […]

尝试运行supervisord的.ini文件错误

我正在尝试使用http://supervisord.org/ 。 但碰到和错误。 我在我正在运行在同一目录中的supervisord.conf文件。 我试图在我的OSX Lion电脑上第一次运行supervisord ,当我运行它,我得到的错误: Error: .ini file does not include supervisord section 我通过easy_install安装它,就像说明中说的那样。 在Googlesearch中找不到有用的东西。 帮助和方向将不胜感激。 谢谢。

在HUP信号后,gunicorn不能完全重新加载

我试图得到一个工作主pipe/ gunicorn / djangostream浪汉设置。 我正在使用python-watchdog在发生代码更改时尝试重新启动gunicorn。 我正在使用gunicorn的以下pipe理员configuration: [program:someapp] environment=PYTHONPATH='/vagrant/libs/unmodified/django-error-capture-middleware/src:/vagrant:/home/vagrant/.virtualenvs/someapp/lib/python2.7/site-packages:/vagrant/wsgi',DJANGO_SETTINGS_MODULE=someapp.settings.vagrant command=/home/vagrant/.virtualenvs/someapp/bin/gunicorn –bind 0.0.0.0:80 –pid=/home/vagrant/.gunicorn.pid –preload –workers=1 –debug –log-level debug –error-logfile – –access-logfile – vagrant_wsgi:application user=root group=root redirect_stderr=true stdout_logfile = /vagrant/logs/gunicorn.log stderr_logfile = /vagrant/logs/gunicorn.log stdout_logfile_maxbytes=0 autostart=true autorestart=true stdout_events_enabled=true loglevel=debug 这一切工作得很好。 看门狗也工作正常。 但是,当我使用看门狗运行一个kill -HUP [pidofgunicorn] ,有时它不会实际上完全重新加载。 有时候django甚至会报告,当模块在之前的时候就会丢失(我根本没有修改过sys.path)。 如果我使用看门狗运行supervisorctl restart someapp ,它工作正常。 但是,这需要更长的时间,特别是在virtualbox实例上。 有什么我可以做得到gunicorn优雅重新加载,实际上看到所作的变化?

我如何让主pipe作为另一个用户来运行我的程序?

使用超级环境variables来运行我的命令的主pipe有很多麻烦。 我的主pipeconf。 ; supervisor config file [unix_http_server] file=/var/run//supervisor.sock ; (the path to the socket file) chmod=0700 ; sockef file mode (default 0700) [supervisord] logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) user = a-user-name environment = HOME='/home/a-user-name',APP='staging.example.com',SYMFONY_ENVIRONMENT='staging' ; the below section must remain in […]

AWS AMI Linux上的pipe理员设置

我试图让主pipe工作,以确保我的队列系统始终运行。 下面是我采取的步骤,我从各种来源拼凑起来(以超级用户或超级用户的身份) 冉: # easy_install supervisor # echo_supervisord_conf > /etc/supervisord.conf # vi supervisord.conf 将以下内容粘贴到文件结尾处: command=/usr/bin/php /path/to/AppName/artisan –env=production –timeout=240 queue:listen 冉: # supervisord -c /etc/supervisord.conf # supervisorctl supervisor> status supervisor> 它不显示任何东西。 冉: # service supervisord reload supervisord: unrecognized service

Nginx:当nginx运行在supervisord下时,如何使用docker log collector

官方的nginx docker image( Dockerfile )使用以下技巧将其日志交给stdout和stderr,以便docker日志采集器捕获这些日志并使用docker logs <container-name> : # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log 我想要做同样的事情,但是我在我的容器中拥有supervisord作为PID 1,它监督nginx进程并捕获stdout和stderr并将其放入它自己的日志文件中。 因此日志不能到达docker日志收集器。 这是我的supervisord.conf中的相关块 [program:nginx] command=/usr/sbin/nginx -g "daemon off;" priority=990 ; NOTE: We do not want to redirect stdout and stderr of a nginx process to a […]

如何在程序部分使用supervisord的环境选项?

supervisord文档说明 当supervisord运行一个subprocess时,没有shell被执行,所以环境variables例如USER,PATH,HOME,SHELL,LOGNAME等不会从默认值改变或者被重新分配。 (…)如果您需要为特定的用户设置特定程序的环境variables,那么您必须在environment = program config选项中明确地执行它。 包括一个例子,我把它复制到/etc/supervisor/conf.d/apache2.conf : [program:apache2] command=/home/chrism/bin/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND user=chrism environment=HOME=/home/chrism,USER=chrism 然而, # supervisorctl reread ERROR: CANT_REREAD: Unexpected end of key/value pairs 删除apache2configuration的“环境”行不会导致重新读取的分析错误。 这里有什么? 我在Debian Squeeze上使用主pipe3.0a8-1,注意主pipe是3.0a10; 自3.0a8以来,我找不到environment参考

为什么在主pipe中使用`bash -c`而不是直接调用脚本?

我开始使用supervisord来控制服务器中的服务。 我不是Linux的专业用户,但可以很好地得到它并运行。 出于好奇,我已经注意到,supervisord中的大多数命令似乎被称为: [program:install] command=bash -c "/src/etc/install.sh" 我读过bash的man,并且知道-c应该用来插入在string之后传递的variables。 那么在主pipe(或任何其他地方)使用bash -c什么意义,而不是直接调用脚本(如下面的例子),考虑到没有通过/使用的variables? [program:install] command=/src/etc/install.sh 谢谢!