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

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

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

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

5 ответов


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

  1. файл, который вы указали в ссылке https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd необходимо скопировать в ваш /etc/init.d папка с именем celeryd
  2. затем вам нужно создать файл конфигурации в папке /etc/default на имя celeryd, который используется выше скрипт. Этот конфигурационный файл в основном определяет определенные переменные и пути, которые используются вышеуказанным скриптом. Вот!--12-->пример конфигурации.
  3. этой ссылке общие сценарии инициализации объясняет процесс и может использоваться для справки

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

немного подправить.. У меня есть сельдерей рабочий работает с помощью этого скрипта:

(используя Ubuntu upstart)

по имени iamcelery.conf и поместил его в /etc / init (примечание: не 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 <michel@iamit.nl>"

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 "" "$@"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

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

sudo start iamcelery

или стоп:

sudo stop iamcelery

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

sudo status iamcelery

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

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

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 "" "$@"' <place here your unprovilegd username> -- srv/<here the path of your django project>/bin/django celeryd -BE -l info
end script

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

изменить 5 сентября

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


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


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

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


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

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

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

sudo сервис myservice статус

sudo сервис myservice start

sudo сервис myservice stop

команд

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

служба MyService.обслуживание:

[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 вместо него.

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