убунту crontab сельдерея бить - PullRequest
       9

убунту crontab сельдерея бить

0 голосов
/ 23 сентября 2019

У меня есть несколько заданий сельдерея, которые выполняются с помощью удара.В процессе разработки я использовал одну команду, чтобы настроить это, например:

celery worker -A my_tasks -n XXXXX@%h -Q for_mytasks -c 1 -E -l INFO -B -s ./config/celerybeat-schedule --pidfile ./config/celerybeat.pid

При переходе в производство я вставил это в скрипт, который активировал мой venv, установил PYTHONPATH, удалил старые файлы ударов, cdисправить каталог, а затем запустить сельдерей.Это работает абсолютно нормально.Однако в производстве я хочу отделить работника от планировщика ритма, например:

celery worker -A my_tasks -n XXXXX@%h -Q for_mytasks -c 1 -E -l INFO -f ./logs/celeryworker.log
celery beat -A my_tasks -s ./config/celerybeat-schedule --pidfile ./config/celerybeat.pid -l INFO -f ./logs/celerybeat.log

Теперь все это прекрасно работает, если включить его в соответствующие сценарии bash.Однако мне нужно, чтобы они запускались при запуске сервера.Я столкнулся с несколькими проблемами:

1) в crontab -e @reboot my_script не будет работать.Я должен вставить задержку для полного запуска rabbitmq, то есть @reboot sleep 60 && my_script.Теперь это кажется мне немного «грязным», но я могу с этим смириться.

2) celery worker требуется несколько секунд, чтобы закончить, прежде чем celery beat можно будет запустить правильно.Я испробовал всевозможные директивы cron, чтобы выполнить ритм, запускаемый после того, как работник успешно выполнил, но не смог запустить ритм.Мое текущее решение в crontab выглядит примерно так:

@reboot sleep 60 && my_script_worker
@reboot sleep 120 && my_script_beat

Итак, в основном, Ubuntu загружается, ждет 60 секунд и запускает работника сельдерея, а затем ждет еще 60 секунд, прежде чем запустить ритм сельдерея.Это отлично работает, но мне кажется еще более «грязным».В идеальном мире я хотел бы пометить, когда rabbitmq готов к запуску работника, а затем пометить, когда работник выполнил успешно, чтобы я мог запустить бит.

Мой вопрос: кто-нибудь сталкивался с этой проблемой, и если да, тоу них есть более изящный способ начать работу с сельдерея и биться при перезагрузке сервера?

РЕДАКТИРОВАТЬ: 24/09/2019 Благодаря DejanLekic & Greenev

Я потратил несколько часов, чтобы перейти с cron наSystemd.Да, я полностью согласен с тем, что это гораздо более надежное решение.Мой работник и продавец сельдерея теперь запускаются системой как systemd при перезагрузке.

У меня есть один совет для тех, кто пытается это сделать, но он не упомянут в документации по сельдерею.Команда template beat создаст в вашей рабочей директории файл «база данных ритма сельдерея» с именем celerybeat-schedule.Если вы перезапустите службу ударов, этот файл приведет к появлению ложных заданий сельдерея, которые, по-видимому, не соответствуют вашему фактическому расписанию сельдерея.Решение состоит в том, чтобы удалять этот файл каждый раз, когда запускается служба ритма.Я также удаляю файл pid, если он там есть.Я сделал это, добавив 2 ExecStartPre и опцию -s к службе ударов:

ExecStartPre=/bin/sh -c 'rm -f ${CELERYBEAT_DB_FILE}'
ExecStartPre=/bin/sh -c 'rm -f ${CELERYBEAT_PID_FILE}'
ExecStart=/bin/sh -c '${CELERY_BIN} beat  \
  -A ${CELERY_APP} --pidfile=${CELERYBEAT_PID_FILE} \
  -s ${CELERYBEAT_DB_FILE} \
  --logfile=${CELERYBEAT_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL}'

Спасибо, ребята.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Для того, чтобы демонизировать работника сельдерея, мы используем systemd, чтобы рабочий и его такт могли запускаться как отдельные службы и были настроены на перезагрузку сервера, просто сделав эти службы enabled

1 голос
/ 23 сентября 2019

Что вы действительно хотите, так это запустить процесс Celery beat как сервис systemd или SysV.Это подробно описано в разделе Daemonization документации Celery.Фактически, то же самое касается и рабочего процесса.

Почему?- В отличие от вашего решения, которое включает crontab с строкой @reboot, например, systemd может проверить работоспособность службы и перезапустить ее, если необходимо.Все службы Linux на ваших компьютерах Linux запускаются таким образом, потому что это было сделано специально для этой цели.

...