Как запустить сельдерей в качестве демона в производстве?
Я создал файл celeryd в /etc / defaults/ из кода здесь:
https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd
теперь, когда я хочу запустить celeryd как демон и сделать это: sudo/etc / init.d / celerdy говорит, что команда не найдена. Где я ошибаюсь?
5 ответов
Я не уверен, что вы здесь делаете, но это шаги для запуска сельдерея как демона.
- файл, который вы указали в ссылке
https://github.com/celery/celery/blob/3.0/extra/generic-init.d/celeryd
необходимо скопировать в ваш
/etc/init.d
папка с именемceleryd
- затем вам нужно создать файл конфигурации в папке
/etc/default
на имяceleryd
, который используется выше скрипт. Этот конфигурационный файл в основном определяет определенные переменные и пути, которые используются вышеуказанным скриптом. Вот!--12-->пример конфигурации. - этой ссылке общие сценарии инициализации объясняет процесс и может использоваться для справки
Я нашел эту ссылку, очень полезно: Как написать работу 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)