app-logo
وب سرویس

پلتفرم وب سرویس سریع، امن و پایدار برای توسعه‌دهندگان در سراسر جهان.


لینک‌های سریع
  • خانه
  • سرویس ‌ها
  • حساب کاربری
  • بلاگ
  • سوالات متدوال
  • شرایط استفاده
  • پشتیبانی

تغییر زبان
  • English (US)
  • Persian (Farsi)

© ۲۰۲۶ وب‌سرویس — با عشق و خلاقیت برای شما ساخته شده ❤️

وبلاگراهنمای زمان‌بندی وظایف از لینوکس تا سرورلس و کلود

راهنمای زمان‌بندی وظایف از لینوکس تا سرورلس و کلود

نکات کلیدی و خلاصه

آموزش گام‌به‌گام زمان‌بندی تسک‌ها با Crontab، سرورلس، GitHub Actions و ترفندهای جلوگیری از تداخل اجرای کارهای طولانی در سرور.

تاریخ بروزرسانی:۱۴ مهر ۱۴۰۵
۱۷ دقیقه مطالعه

چرا زمان‌بندی وظایف ستون فقرات پایداری وب مدرن است؟

اتوماسیون وظایف پس‌زمینه مثل پاک‌سازی نشست‌های منقضی، هماهنگ‌سازی متادیتا و اخذ نسخه پشتیبان، تفاوتی اساسی میان پلتفرم پایدار و سرور شکننده رقم می‌زند. سیستم‌های مدرن به اجرای بموقع کوئری‌ها وابسته هستند؛ اختلال یک‌ساعته در ثبت لاگ یا اجرای تراکنش‌های معوقه، مستقیماً سلامت پایگاه‌داده را تهدید می‌کند.

اصل عملیاتی: وظیفه زمان‌بندی‌شده نباید به حافظه محلی یا ماندگاری پردازه وابسته بماند؛ معماری بی‌وضعیت خطر شکست زنجیره‌ای را به صفر می‌رساند.

تفاوت فنی Cron daemon و ابزار Crontab چیست؟

بسیاری از متخصصان این دو واژه را به‌جای هم به کار می‌برند، ولی دیمن سیستم با رابط کاربری تفاوت معماری دارد:

crond (Daemon)
پردازه مقیم در پس‌زمینه سیستم‌عامل لینوکس که هر شصت ثانیه فایل‌های پیکربندی را می‌خواند و دستورات سررسید را اجرا می‌کند.
crontab (Cron Table)
فایل متنی جدول زمان‌بندی و نام ابزاری خط فرمانی که دسترسی امن به ویرایش این فایل را با قفل سیستمی تضمین می‌کند.

آناتومی فیلدهای زمانی در فرمت پنج‌بخشی استاندارد

فرمت کلاسیک یونیکس شامل ۵ فیلد متنی است که با فاصله تفکیک می‌شوند و کوچک‌ترین واحد آن یک دقیقه کامل تقویمی است:

* * * * * command_to_execute
| | | | |
| | | | +----- Day of week (0 - 7) (0 and 7 = Sunday)
| | | +---------- Month (1 - 12)
| | +--------------- Day of month (1 - 31)
| +--------------------- Hour (0 - 23)
+----------------------- Minute (0 - 59)

عملگرهای پیشرفته محاسباتی و نمادهای زمانی لینوکس

ترکیب مقادیر عددی با عملگرهای چهارگانه انعطاف پیکربندی را تا سطح بازه‌های نامتقارن بالا می‌برد:

  • ستاره (*): نماینده تمام مقادیر مجاز در ستون جاری؛ معادل چرخه تکرار کامل.
  • ویرگول (,): جداساز فهرست صریح مقادیر، مثلاً مقادیر 1,15,30 برای دقایق انتخابی.
  • خط تیره (-): بازه پیوسته مقادیر بدون افتادگی، مانند 9-18 برای ساعات کاری اداری.
  • اسلش (/): مشخص‌کننده گام پرش زمانی، نظیر مقادیر */20 برای هر بیست دقیقه یک‌بار.

کلمات کلیدی آماده جایگزین مقادیر عددی زمان‌بندی

جدول زیر ماکروهای استاندارد سیستمی را به همراه معادل فنی عددی و کاربرد معمول مقایسه می‌کند:

ماکروهای رزروشده هسته زمان‌بندی لینوکس
ماکرو کلیدیفرمت عددی معادلزمان شلیک وظیفهسناریوی نمونه
@hourly0 * * * *دقیقه صفر هر ساعتتخلیه لاگ‌های حجیم به سرور مرکزی
@daily0 0 * * *ساعت 00:00 هر شبتولید گزارش آماری ترافیک سایت
@weekly0 0 * * 0نیمه‌شب یکشنبه‌هاایندکس‌گذاری پایگاه داده و خلاصه هفته
@rebootفاقد فرمت عددیبلافاصله پس از بالا آمدن هستهراه‌اندازی سرویس کش ردیس یا تونل

چگونه از تداخل اجرای هم‌زمان پردازه‌ها با flock جلوگیری کنیم؟

اگر اجرای یک اسکریپت ده دقیقه طول بکشد ولی بازه کرون هر پنج دقیقه باشد، سرور با انباشت پردازه‌های تکراری و بن‌‌بست دیتابیس روبه‌رو می‌شود. ابزار سیستمی flock با اعمال قفل انحصاری، مانع اجرای هم‌پوشان کارها می‌شود:

*/5 * * * * /usr/bin/flock -n /var/run/sync_worker.lock /usr/bin/node /srv/app/worker.js >> /var/log/sync_worker.log 2>&1

پیکربندی Cron در پلتفرم‌های بدون سرور (Vercel Serverless)

در محیط‌های ابری بدون سرور پردازه‌ای مداوم روشن نیست. سرویس ابری به شکل بیرونی درخواست‌های اینترنتی امن ارسال می‌کند. در فایل vercel.json می‌توان اندپوینت هدف را مشخص کرد:

{
  "crons": [
    {
      "path": "/api/cron/purge-expired-sessions",
      "schedule": "0 3 * * *"
    }
  ]
}

اتوماسیون زمان‌بندی‌شده با GitHub Actions برای فرآیندهای سنگین

سرویس گیت‌هاب توان محاسباتی رایگانی روی کانتینرهای مجزا فراهم می‌کند که فشاری روی سرور اصلی محصولات وارد نمی‌کند. فایل .github/workflows/scheduled-task.yml بدین شکل پیاده‌سازی می‌شود:

name: Pipeline Scheduled Trigger
on:
  schedule:
    - cron: '0 1 * * *'
jobs:
  run_worker:
    runs-on: ubuntu-latest
    steps:
      - name: Trigger Remote Secured Worker
        run: curl -sS -X POST https://apidevelopers.ir/api/cron/process -H 'Authorization: Bearer '"$CRON_SECRET"
        env:
          CRON_SECRET: ${{ secrets.CRON_SECRET }}

امنیت وب‌هوک‌های زمان‌بندی: اعتبارسنجی هدر در Next.js

مسیرهای فراخوانی‌شده از سمت ارائه‌دهندگان ابری در اینترنت عمومی قرار دارند. بدون بررسی امضا یا توکن محرمانه، هر فردی می‌تواند منابع سرور را به مصرف برساند:

export async function POST(request: Request) {
  const authorization = request.headers.get('authorization');
  const expectedToken = 'Bearer ' + process.env.CRON_SECRET;
  if (authorization !== expectedToken) {
    return new Response(JSON.stringify({ error: 'Forbidden Access' }), {
      status: 401,
      headers: { 'Content-Type': 'application/json' }
    });
  }
  return new Response(JSON.stringify({ status: 'Job Dispatched' }), {
    status: 200,
    headers: { 'Content-Type': 'application/json' }
  });
}

چک‌لیست استقرار زمان‌بندی بدون قطعی در سرورهای ابری

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

  1. ثبت متغیرهای محیطی با آدرس‌های مطلق به جای استفاده از متغیر نسبی PATH
  2. انتقال تمام خطاهای استاندارد و خروجی‌ها به یک فایل ثبت گزارش مجزا با عملگر هدایتگر
  3. تنظیم تایم‌اوت قطعی برای جلوگیری از معلق ماندن پردازه در زمان قطعی دیتابیس
  4. جداسازی زمان‌بندی ابری از منابع داخلی با احراز هویت مبتنی بر کلیدهای امنیتی متغیر
  5. استفاده از قفل فایل در اسکریپت‌های سروری برای حذف کامل خطرات اشتراک منابع

مقایسه جامع رویکردهای سنتی و سرورلس در مدیریت وظایف

انتخاب زیرساخت زمان‌بندی به نیازمندی‌های مقیاس، دسترسی شبکه و هزینه‌های عملیاتی وابسته است:

مقایسه زیرساخت‌های اجرای زمان‌بندی داده‌ها
شاخص فنیکرون سنتی (Linux VPS)وب‌هوک سرورلس (Vercel)ورک‌فلو ایزوله (GitHub Actions)
محدودیت زمان اجرانامحدودبسته به لایه سرویس (تا ۶۰ ثانیه)حداکثر ۶ ساعت برای هر اجرای مجزا
پیچیدگی نگهداریبالا (نیازمند رصد سرور و دیمن)صفر (کامپوننت کاملاً ابری)پایین (مدیریت بر بستر گیت)
دسترسی به فایل محلیکامل و مستقیم به دیسک سرورندارد (فقط دسترسی موقت ایزوله)موقتی در طول اجرای ماشین مجازی
هزینه جاری زیرساختهزینه ثابت ماهانه سرور مجازیبسته به تعداد صدا زدن ریکوئسترایگان در سقف ماهانه مخازن عمومی

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

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

  • اتکا به متغیرهای PATH محیطی پیش‌فرض: دیمن سیستم با متغیرهای PATH بسیار محدود شده اجرا می‌شود؛ ننوشتن مسیر مطلق مفسرها پردازه را با خطای یافت نشدن متوقف می‌کند.
  • فراموش کردن انتهای فایل با یک خط خالی جدید: ویرایشگرهای قدیمی کرون در صورت نبود کاراکتر شکست خط در انتهای فایل آخرین دستور ثبت‌شده را پردازش نمی‌کنند.
  • تطابق نامطلوب روز ماه و روز هفته: تنظیم هم‌زمان ستون روز ماه و روز هفته با منطق OR ارزیابی می‌شود و شلیک‌های دوبرابری را تحمیل می‌کند.

پرسش‌های متداول توسعه‌دهندگان درباره زمان‌بندی مدرن

چرا اسکریپت در ترمینال دستی کار می‌کند ولی در کرون جاب متوقف می‌شود؟

دلیل عمده تفاوت فایل‌های محیطی کاربری است؛ کرون فایل تنظیمات شل شما مثل bashrc را لود نمی‌کند و مفسر مسیر اسکریپت را نمی‌شناسد.

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

خیر، کوچک‌ترین واحد استاندارد کرون یونیکس ۶۰ ثانیه است؛ برای دوره‌های ثانیه‌ای از حلقه دائم با دستور sleep یا تایمرهای systemd استفاده می‌شود.

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

استفاده از ابزار سیستمی logrotate یا ارسال خروجی‌های بی‌اهمیت به حفره سیاه سیستم‌عامل با مسیر فرستادن dev/null مانع سرریز حافظه دیسک می‌شود.

#devops#automation#cronjob
وبلاگ