سوالات فنی متداول

"اقدامات زمان‌بندی‌شده در زمان دقیق مورد انتظار اجرا نمی‌شوند"

در پلتفرم Odoo.sh، نمی‌توانیم زمان اجرای دقیق برای اقدامات زمان‌بندی‌شده را تضمین کنیم.

این به این دلیل است که ممکن است چندین مشتری روی یک سرور باشند و ما باید سهم عادلانه‌ای از سرور را برای هر مشتری تضمین کنیم. بنابراین، اقدامات زمان‌بندی‌شده به شکلی کمی متفاوت از یک سرور عادی اودو اجرا می‌شوند و بر اساس سیاست بهترین تلاش انجام می‌گیرند.

هشدار

انتظار نداشته باشید که هیچ اقدام زمان‌بندی‌شده‌ای بیشتر از هر ۵ دقیقه یک‌بار اجرا شود.

آیا "بهترین روش‌ها" در مورد اقدامات زمان‌بندی‌شده وجود دارد؟

اودو.sh همیشه زمان اجرای اقدامات زمان‌بندی‌شده (معروف به کرون‌ها) را محدود می‌کند. بنابراین، باید این موضوع را هنگام توسعه کرون‌های خود در نظر داشته باشید.

ما توصیه می‌کنیم که:

  • اقدامات زمان‌بندی‌شده شما باید بر روی دسته‌های کوچکی از رکوردها کار کنند.

  • اقدامات زمان‌بندی‌شده شما باید پس از پردازش هر دسته، کار خود را ثبت کنند؛ به این ترتیب، اگر به دلیل محدودیت زمانی متوقف شوند، نیازی به شروع مجدد نیست.

  • اقدامات زمان‌بندی‌شده شما باید idempotent باشند: یعنی نباید در صورت اجرا شدن بیش از حد انتظار، اثرات جانبی ایجاد کنند.

چگونه می‌توانم وظایف را هنگام تغییر آدرس IP به صورت خودکار انجام دهم؟

اودو.sh به مدیران پروژه تغییرات آدرس IP را اطلاع می‌دهد. علاوه بر این، زمانی که آدرس IP یک نمونه تولید تغییر می‌کند، یک درخواست HTTP GET به مسیر /_odoo.sh/ip-change ارسال می‌شود که آدرس IP جدید به‌عنوان یک پارامتر رشته‌ای پرس‌وجو (new) و آدرس IP قبلی به‌عنوان یک پارامتر اضافی (old) در آن گنجانده شده است.

این مکانیزم امکان اعمال اقدامات سفارشی در پاسخ به تغییر آدرس IP را فراهم می‌کند (مانند ارسال ایمیل، تماس با API فایروال، پیکربندی اشیاء پایگاه داده و غیره).

به دلایل امنیتی، مسیر /_odoo.sh/ip-change تنها به‌صورت داخلی توسط خود پلتفرم قابل دسترسی است و در صورت دسترسی از طریق هر روش دیگری، پاسخ 403 بازمی‌گرداند.

در اینجا یک مثال از شبه‌پیاده‌سازی آورده شده است:

class IPChangeController(http.Controller):

    @http.route('/_odoo.sh/ip-change', auth='public')
    def ip_change(self, old=None, new=None):
        _logger.info("IP address changed from %s to %s", old, new)
        # Then perform whatever action required for your use case, e.g., update an
        # ir.config_parameter, send an email, contact an external firewall service's API, ...
        return 'ok'