نوشتن فایل docker-compose بهینه تر

سلام دوستان مت توی پروژ خودم از celery استفاده میکنم
و فایل docker-compose که دارم تقریبا به این صورته

version: '3'

services:
    web: &web
      restart: always
      build: .
      command: uwsgi --ini  ./config/uwsgi/uwsgi.ini
    celery:
      <<: *web
      restart: always
      command: celery -A mahekan worker -l info
      ports: []
      depends_on:
        - web
        - redis
    celery-beat:
      <<: *web
      restart: always
      command: celery -A mahekan beat -l info
      ports: []
      depends_on:
          - web
          - redis

الان سه تا کانتینر ایجاد میشه که یکی خود web هستش و دوتای دیگه که کپی از web هستن و فقط برای اجرای یه کامند به کار میرن
نمیشه که این کامند های celery رو به یه روش ساده تری اجرا کرد که دیگه کانتینری ساخته نیشه
و حس کردم که حافظه بیشتری هم میبره

1 پسندیده

نیازی به چنتا کانتینر نداری، میتونی چند فرمان با هم اجرا کنی.
اگر کار نکرد حتما یه خطای کوچیک داشتم، اطلاع بده که درستش کنم :blush:

command: >
  sh -c "uwsgi --ini  ./config/uwsgi/uwsgi.ini
  && celery -A mahekan worker -l info 
  && celery -A mahekan beat -l info"
1 پسندیده

الان چطور میتونم log فایل هر کدوم رو جدا کنم

با استفاده از گزینه f میتونی به celery بگی که کجا لاگ کنه، احتمالا توی داکیومنت celery بتونی پیداش کنی.
فقط قسمت لاگ فرمان اونم برای worker رو نوشتم بقیشو‌ میسپارم به خودت، با مبایل یکمی سخته

celery worker -f worker_log.log

اینم برای هر دو اجرا کن ببین چی‌ پیدا میکنی

celery worker --help

https://docs.celeryproject.org/en/stable/userguide/configuration.html

1 پسندیده

ممنون
ولی نمیشه مستقیم از این روش استفاده کرد

celery worker >> file.log

اونم میشه، امتحان کن

1 پسندیده

توی این روش درست میگم که منابع بیشتری استفاده میکنه؟ روش اولی که فرستادم منظورمه
toomaj

بله خب، چرا باید برای یه لاگ ساده دو تا کانتینر اجرا کرد؟

الان از این روش استفاده کردم celery بدون مشکل اجرا میشه ولی فایل log ها توی مسیرشون نیستن و

مشکل اجرا میشه یعنی چی؟ و اگر اونجوری بخوای فایل درست کنی باید مسیرش بایند بشه به سیستم‌ میزبان

من به این صورت نوشتم

command: >
          sh -c "uwsgi --ini  ./config/uwsgi/uwsgi.ini
          && celery -A mahekan worker -f /home/worker.log
          && celery -A mahekan beat -f /home/beat.log"

celery -A mahekan worker --logfile=logfile.log

با این روش توی سیستم خودم بدون داکر celery جواب میده و فایل logرو ایجاد میکنه ولی توی داکر جواب نمیده

بالا عرض کردم، باید مسیرش بایند بشه:

1 پسندیده

این کامند های celery اجرا نمی شدن :joy:
چون قبلا کانتینر های up داشتم فک میکردم celery داره کار میکنه در صورتی که اصلا کار نمیکنه

فق کامند اولی کار میکنه که برای راندازی web هستش

به نظر من هم دلیلش میتونه این باشه که کامند اول توی شیل در حال اجرا هستش و تموم نمیشه تا کامند بعدی ران بشه

دوستان برا این روش بهینه تری کسی سراغ نداره

از روش اقا toomaj
استفاده کردم ولی اصلا celery کار نکرد

فکر میکنم درست چیزی که عرض کردم و پیاده نکردین، چون تقریبا راه منطقی دیگه ای وجود نداره،
من حدس میزنم celery کار میکنه اما شما لاگ رو نمی بینید، سعی میکنم یه تست بزنم

1 پسندیده

نه چون task های مربوطه اجرا نمی شدن اصلا

1 پسندیده

در ضمن اون‌ کامند که && داره رو لوکال اجرا کنید ببینید نتیجه چیه، منم تست میکنم

1 پسندیده

خب پس این یه‌ مضوع دیگست

تست کردم بدون داکر که خروجی درست داره و لوگ فایل هم ایجاد میشه

البته لوگ فایل رو باید به این صورت فرستاد

celery -A mahekan worker --logfile=logfile.log