Celery: Systemd: перезагрузка сельдерея аккуратно выключает его, но не запускает обратно

Созданный на 15 нояб. 2017  ·  3Комментарии  ·  Источник: celery/celery

Контрольный список

  • [x] Я подтвердил, что проблема существует с ветвью master Celery.
  • [x] Я включил вывод celery -A proj report в проблему:
software -> celery:4.1.0 (latentcall) kombu:4.1.0 py:3.5.2
            billiard:3.5.0.3 redis:2.10.6
platform -> system:Linux arch:64bit, ELF imp:CPython
loader   -> celery.loaders.app.AppLoader
settings -> transport:redis results:disabled

CACHES: {
    'default': {   'BACKEND': 'django_redis.cache.RedisCache',
                   'LOCATION': 'redis://localhost:6379/1',
                   'TIMEOUT': 3600}}

CELERY_TASK_COMPRESSION: 'gzip'
CELERY_TASK_IGNORE_RESULT: True
CELERY_ACCEPT_CONTENT: ['pickle', 'json', 'msgpack', 'yaml']
CELERY_BROKER_URL: 'redis://localhost:6379/0'

DEBUG: False
INSTALLED_APPS:
    ('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.admin',
 'django.contrib.sitemaps',
 'django.contrib.staticfiles',
 'django.contrib.humanize',
 'django.contrib.redirects',
 'django.contrib.gis',

 'django_extensions',
)

Действия по воспроизведению

В Ubuntu 16.04.

  1. настроить сельдерей через systemd в соответствии с документами по сельдерею
  2. начать сельдерей через sudo service <your-celery-service-name> start
  3. попробуйте перезагрузить сельдерей через sudo service <your-celery-service-name> reload

Ожидаемое поведение

Сельдерей должен изящно перезагрузиться.

Фактическое поведение

Сельдерей плохо перезаряжается. Он выключается, но никогда не перезапускается.

После выдачи запроса на перезагрузку (и последующего отказа при запуске) вывод sudo journalctl -xe , похоже, не показывает ничего гнусного:

Nov 15 04:33:04 ip-172-31-44-219 sudo[12972]:   ubuntu : TTY=pts/0 ; PWD=/home/ubuntu ; USER=root ; COMMAND=/usr/sbin/service myproj-celery reload
Nov 15 04:33:04 ip-172-31-44-219 sudo[12972]: pam_unix(sudo:session): session opened for user root by ubuntu(uid=0)
Nov 15 04:33:04 ip-172-31-44-219 systemd[1]: Reloading myproj celery worker.
-- Subject: Unit myproj-celery.service has begun reloading its configuration
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit myproj-celery.service has begun reloading its configuration
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]: celery multi v4.1.0 (latentcall)
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]: > Stopping nodes...
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]:         > worker1@ip-172-31-44-219: TERM -> 12962
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]: > Waiting for 1 node -> 12962.....
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]:         > worker1@ip-172-31-44-219: OK
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]: > Restarting node worker1@ip-172-31-44-219: OK
Nov 15 04:33:07 ip-172-31-44-219 sh[12979]: > Waiting for 1 node -> None...
Nov 15 04:33:07 ip-172-31-44-219 sh[12992]: celery multi v4.1.0 (latentcall)
Nov 15 04:33:07 ip-172-31-44-219 sh[12992]: > worker1@ip-172-31-44-219: DOWN
Nov 15 04:33:07 ip-172-31-44-219 systemd[1]: Reloaded myproj celery worker.
-- Subject: Unit myproj-celery.service has finished reloading its configuration
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit myproj-celery.service has finished reloading its configuration
--
-- The result is done.
Nov 15 04:33:07 ip-172-31-44-219 sudo[12972]: pam_unix(sudo:session): session closed for user root

Возможно, проблема в том, что CELERYD_PID_FILE="/var/run/celery/%N.pid" неизвестно? Это означает, что мы не можем сообщить Systemd (через PIDFile= ), каково фактическое местоположение файла PID, потому что он генерируется самим сельдереем, не так ли?

Deployment Bug Report

Самый полезный комментарий

У нас такая же проблема.
Я разрешаю это, отредактировав конфигурацию systemd.
Перезагрузка = всегда

Все 3 Комментарий

Не могли бы вы опубликовать свой файл systemd и сельдерей?
Вы можете указать systemd, где хранить PID, но вам нужно его избежать:

celery multi restart w1 -A proj --pidfile=/tmp/celery_%%n.pid

Обратите внимание на двойной процент.

У нас такая же проблема.
Я разрешаю это, отредактировав конфигурацию systemd.
Перезагрузка = всегда

Была ли эта страница полезной?
0 / 5 - 0 рейтинги