Запустите Celery в производство вместе с Supervisor - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь запустить Celery v3.1.25 в производство.Как я обнаружил в документах , есть 4 способа его запуска, один из которых должен использовать Supervisor.Я использовал его раньше - мой проект Django работает с ним.Я сделал следующие шаги:
1. Создал /etc/supervisor/conf.d/mycelery.conf по основам официального репозитория git .

[program:mycelery]
command=celery worker -A cosmetics_crawler_project --loglevel=INFO
directory=/home/chiefir/polo/Cosmo
user=chiefir
numprocs=1
stdout_logfile=/home/chiefir/logs/celery/celery.log
stderr_logfile=/home/chiefir/logs/celery/celery.log
autostart=true
autorestart=true
startsecs=10
stopasgroup=true
priority=1000

2.Создано /etc/supervisor/conf.d/mycelerybeat.conf:

[program:mycelerybeat]
command=celery beat -A cosmetics_crawler_project --schedule /var/lib/celery/beat.db --loglevel=INFO
directory=/home/chiefir/polo/Cosmo
user=chiefir
numprocs=1
stdout_logfile=/home/chiefir/logs/celery/celerybeat.log
stderr_logfile=/home/chiefir/logs/celery/celerybeat.log
autostart=true
autorestart=true
startsecs=10
stopasgroup=true
priority=999

3.И мой /etc/supervisord.conf установлен на:

[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)

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket    

[include]
files = /etc/supervisor/conf.d/*.conf

Я нашел в этот вопрос , что мне нужно запустить supervisord, чтобы выстрелить из сельдерея, но выдает ошибку:

Traceback (most recent call last):
  File "/usr/bin/supervisord", line 9, in <module>
    load_entry_point('supervisor==3.2.0', 'console_scripts', 'supervisord')()
  File "/usr/lib/python2.7/dist-packages/supervisor/supervisord.py", line 367, in main
    go(options)
  File "/usr/lib/python2.7/dist-packages/supervisor/supervisord.py", line 377, in go
    d.main()
  File "/usr/lib/python2.7/dist-packages/supervisor/supervisord.py", line 77, in main
    info_messages)
  File "/usr/lib/python2.7/dist-packages/supervisor/options.py", line 1388, in make_logger
    stdout = self.nodaemon,
  File "/usr/lib/python2.7/dist-packages/supervisor/loggers.py", line 346, in getLogger
    handlers.append(RotatingFileHandler(filename,'a',maxbytes,backups))
  File "/usr/lib/python2.7/dist-packages/supervisor/loggers.py", line 172, in __init__
    FileHandler.__init__(self, filename, mode)
  File "/usr/lib/python2.7/dist-packages/supervisor/loggers.py", line 98, in __init__
    self.stream = open(filename, mode)
IOError: [Errno 13] Permission denied: '/var/log/supervisor/supervisord.log'

Более запутанным здесь является то, почему он пытается использовать python2.7, если мой проект работает в python 3.5?И что мне делать дальше, потому что в официальных документах Celery есть такая маленькая информация об этом.

ОБНОВЛЕНИЕ 1: Если я запускаю supervisord как пользователь root.

/usr/lib/python2.7/dist-packages/supervisor/options.py:297: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
  'Supervisord is running as root and it is searching '
Error: Another program is already listening on a port that one of our HTTP servers is configured to use.  Shut this program down first before starting supervisord.For help, use /usr/bin/supervisord -h

ОБНОВЛЕНИЕ 2:
Могут ли быть проблемы с неправильной установкой супервизора?Я обнаружил здесь , что я установил супервизор следующим образом:

sudo apt-get install -y supervisor
pip install supervisor==3.3.3

Но я сделал только первую часть, и с этим мой проект работает (без Celery, очевидно).Должен ли я также установить супервизор с pip?
ОБНОВЛЕНИЕ 3 Когда я попытался сделать рецепт из обновления 2 - я получил сообщение, что невозможно использовать pip install supervisor с питоном 3+: /

Supervisor requires Python 2.4 or later but does not work on any version of Python 3.  You are using version 3.5.2 
...