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