Как запустить сельдерей в качестве демона в производстве?

i создал файл celeryd в файле/etc/defaults/из кода:

https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd

Теперь, когда я хочу запустить celeryd в качестве демона и сделать это: sudo/etc/init.d/celerdy, он говорит, что команда не найдена. Где я ошибаюсь?

Ответы

Ответ 1

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

  • Файл, который вы указали в ссылке https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd необходимо скопировать в папку /etc/init.d с именем celeryd
  • Затем вам нужно создать файл конфигурации в папке /etc/default с именем celeryd, которое используется приведенным выше script. Этот файл конфигурации в основном определяет определенные переменные и пути, которые используются выше script. Здесь пример конфигурации.
  • Эта ссылка Общие сценарии инициализации объясняет процесс и может использоваться для справки

Ответ 2

Я нашел эту ссылку чрезвычайно полезной: Как написать работу Upstart Ubuntu для Celery (django-celery) в virtualenv

немного изменив его. У меня работает сельдерей, используя этот script:

(с помощью ubuntu upstart)

с именем iamcelery.conf и поместил его в /etc/init (примечание: not init.d)

# iamcelery -runs the celery worker as my virtual env user
#
#
# This task is run on startup to start the celery worker as my vritual env user

description "runs the celery worker"
author "michel van Leeuwen <[email protected]>"

start on runlevel [2345]
stop on runlevel [!2345]

# retry if ended unexpectedly
respawn
# limit the retries to max 15 times with timeouts of 5 seconds
respawn limit 15 5

# Time to wait between sending TERM and KILL signals
kill timeout 20

task
script
  exec su -s /bin/sh -c 'exec "$0" "[email protected]"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

теперь вы можете запустить этот сеанс (он также запускается при запуске сервера):

sudo start iamcelery

или stop:

sudo stop iamcelery

или проверьте его статус:

sudo status iamcelery

Я не уверен, что это самый лучший способ... однако... после долгого проб и ошибок, пытающихся заставить скрипты initd работать... (без успеха)... это, в конце концов, работает.

Редактировать 8 июня 2013 Мой script приведенный здесь, казалось, работал как корень в конце. Теперь я изменил это:

script
  su <place here your unprovilegd username>
  cd /srv/<here the path of your django project>/
  exec bin/django celeryd -BE -l info
end script

в

script
  exec su -s /bin/sh -c 'exec "$0" "[email protected]"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

и это работает со всеми кредитами на ответ на этот вопрос: Как написать работу Ubuntu Upstart для Celery (django-celery) в virtualenv

Изменить 5 сек. 2013

Осталось еще одна небольшая вещь: мне нужно сделать ctrl-c после команды start в консоли (и выполнить проверку состояния после этого): если кто-то это знает: оставьте в команде, и я могу обновить этот ответ...

Ответ 3

Я обычно использую supervisor (плюс django-supervisor) для этой цели. Таким образом, вам не нужно определять способ демонстрации каждого процесса в вашем приложении (из которого у вас есть хотя бы веб-сервер, на котором размещаются django, а также сельдерей, а также реально любое другое промежуточное программное обеспечение, которое вы используете для поддержки обоих). Супервизор знает, как запускать себя как демон, а все остальные процессы выполняются как дети супервизора.

Ответ 4

Как Марчин объяснил в своем ответе, что супервизор обычно использует то, что люди используют, но если вы ищете что-то, что может работать с python3, и не может дождаться версии 4 для супервизора, которая, я думаю, будет поддерживать python3, тогда вы можете перейти с circus. После его установки вам просто нужен файл circus.ini, который будет иметь все процессы, которые вы хотите демонизировать, а затем запустить этот образец. Circus.ini может выглядеть так:

[watcher:celery]
cmd = full_path/python3.4 full_path/manage.py celeryd -B -l info

[watcher:celerycamera]
cmd = full_path/python3.4 full_path/manage.py celery events --camera=djcelery.snapshot.Camera

[watcher:dceleryflower]
cmd = full_path/python3.4 full_path/manage.py celery flower -A your_app_name --basic_auth=username:password --port=5555 

Если вы хотите получить более подробную информацию, у меня есть сообщение, связанное с тем же здесь. Надеюсь, это сэкономит кому-то время. Благодаря

Ответ 5

Примечание: в ubuntu 16.04 мой anser с файлом .conf больше не работает.

Я создал файл .service и поместил его в /etc/systemd/system/

Я могу использовать

sudo service myservice status

sudo service myservice start

sudo service myservice stop

как команды

например. этот файл:

myservice.service:

[Unit] 
Description=My celery worker 

[Service]
WorkingDirectory=/srv/my-project-path
User=buildout
Group=buildout
Restart=on-failure
RestartSec=20 5
ExecStart=/srv/my-project/bin/django celeryd -BE

[Install]
WantedBy=multi-user.target
Alias=myservice.service

Обратите внимание, что я использую buildout, поэтому в setad bin/django большинству пользователей необходимо использовать путь к python и вместо этого использовать mange.py.

base на: http://minecraft.gamepedia.com/Tutorials/Ubuntu_startup_script (см. раздел systemd)