کارهای زمانبندیشده
کار زمانبندیشده یک سرویس است که همیشه روشن نیست. سر وقت اجرا میشود، کارش را میکند و خاموش میشود؛ مثلاً هر شب گزارش میفرستد، هر ساعت دادههای کهنه را پاک میکند یا هر ۵ دقیقه یک صف را خالی میکند. هزینه فقط برای مدت اجرا حساب میشود.
ساخت
فرم کار زمانبندیشده را باز کنید
در پنل اپلیکیشن «افزودن ← کار زمانبندیشده» را بزنید (یا در فهرست سرویسها، بخش «زمانبندیها»، «کار زمانبندیشدهٔ جدید»).
منبع را انتخاب کنید
- ایمیج داکر: مثلاً
alpine:latestیا ایمیج خود برنامهتان. - از گیت: مخزن و شاخه. کد مثل یک سرویس معمولی ساخته میشود.
زمانبندی را بنویسید
با قالب استاندارد cron (پنج بخش: دقیقه، ساعت، روز ماه، ماه، روز هفته). پایینتر چند نمونه هست.
بعد از ساخت، در صفحهٔ سرویس «دستور اجرا» را تنظیم کنید: همان چیزی که هر بار باید اجرا شود، مثلاً node scripts/cleanup.js یا python manage.py send_reports. اگر خالی باشد، دستور پیشفرض ایمیج یا استک اجرا میشود.
نمونههای زمانبندی
| زمانبندی | یعنی |
|---|---|
*/5 * * * * | هر ۵ دقیقه |
0 * * * * | سر هر ساعت |
30 20 * * * | هر روز ساعت ۲۰:۳۰ UTC (۰۰:۰۰ به وقت تهران) |
0 5 * * 6 | شنبهها ساعت ۵ UTC |
0 0 1 * * | اول هر ماه میلادی |
زمانبندی به وقت UTC است، نه تهران. تهران ۳ ساعت و ۳۰ دقیقه جلوتر از UTC است؛ برای «هر شب ساعت ۲ بامداد تهران» بنویسید 30 22 * * *.
چطور اجرا میشود
- هر اجرا متغیرهای سرویس، متغیرهای محیط و اتصالهای افزونه را دارد و به شبکهٔ خصوصی اپلیکیشن وصل است. پس به دیتابیس و سرویسهای داخلی دسترسی دارد.
- هر اجرا حداکثر ۵ دقیقه وقت دارد و بعد متوقف میشود.
- اجراها روی هم نمیافتند: اگر اجرای قبلی هنوز تمام نشده باشد، نوبت بعدی رد میشود.
- اجرای ناموفق خودکار تکرار نمیشود. نوبت بعدی طبق زمانبندی اجرا میشود.
- هر اجرا از صفر شروع میشود و فایلی که اجرای قبلی نوشته باقی نمیماند. داده را در دیتابیس یا روی دیسک نگه دارید.
اجراها و خروجی
در صفحهٔ سرویس، فهرست اجراهای اخیر را با وضعیت و «خروجی اجرا» (هر چیزی که برنامه چاپ کرده) میبینید. اگر اجرایی شکست خورد، اول خروجیاش را بخوانید.
هزینه
برای هر اجرا، CPU و RAM رزروشدهٔ سرویس ضرب در مدت اجرا حساب میشود. کاری که هر ۵ دقیقه ۱۰ ثانیه اجرا میشود، روزی ۲۸۸ بار و در ماه حدود ۲۴ ساعت اجرا دارد؛ یعنی حدود یکسیام هزینهٔ همان سرویس اگر همیشه روشن بود.
اگر به خطا خوردید
کار سر وقت اجرا نشد
- زمانبندی را به وقت UTC حساب کردهاید؟
- اگر اجرای قبلی هنوز در حال اجرا بوده، این نوبت رد شده است.
اجرا وسط کار قطع میشود
احتمالاً به سقف ۵ دقیقه خورده است. کار را به تکههای کوچکتر تقسیم کنید (هر اجرا بخشی از کار را انجام دهد)، یا اگر کار طولانی است آن را یک سرویس خصوصی همیشهروشن کنید که خودش زمانبندی را انجام دهد.
در خروجی: connection refused به دیتابیس
دیتابیس باید در همان اپلیکیشن و همان محیط باشد و به کار متصل شده باشد.
در سایت گردوسکوی ابری گردو