راهنمای جامع کرون جاب

تاریخ بروزرسانی:۲۰ خرداد ۱۴۰۵
مفهوم Cronjob در واقع یک زمان‌بند (Scheduler) در سیستم‌عامل‌های مبتنی بر لینوکس و یونیکس است که وظایف مختلف (مثل اجرای اسکریپت‌ها، درخواست‌های API یا کوئری‌های دیتابیس) را در زمان‌های دقیقی که برایش تعریف می‌کنید، به صورت کاملاً خودکار در پس‌زمینه اجرا می‌کند. در توسعه وب مدرن، کِرون‌جاب‌ها نقشی کلیدی در اتوماسیون وظایف وبلاگ دارند.

۱. ساختار و آناتومی اصلی Cron

یک دستور زمان‌بندی Cron از ۵ ستاره تشکیل شده است که هر کدام با یک فاصله (Space) از هم جدا شده‌اند و نماینده یک واحد زمانی مشخص هستند. ترکیب این ستاره‌ها زمان دقیق اجرای دستورات را مشخص می‌کند:

*   *   *    *    *     Command to execute
|   |   |    |    |
|   |   |    |    +---- Day of week (0 - 7) (Sunday=0 or 7)
|   |   |    +--------- Month (1 - 12)
|   |   +-------------- Day of month (1 - 31)
|   +-------------------- Hour (0 - 23)
+---------------------- Minute (0 - 59)

۲. میان‌برهای ساده و آماده (Shortcuts)

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

  • @hourly 0 * * * *
    اجرای دستور سر هر ساعت — دقیقاً زمانی که دقیقه به صفر می‌رسد
  • @daily 0 0 * * *
    اجرای دستور هر روز ساعت ۱۲ نیمه‌شب — شروع روز جدید
  • @weekly 0 0 * * 0
    اجرای دستور هر هفته یکشنبه نیمه‌شب — شروع هفته جدید
  • @monthly 0 0 1 * *
    اجرای دستور هر ماه روز اول، ساعت ۱۲ نیمه‌شب — شروع ماه جدید
  • @yearly 0 0 1 1 *
    اجرای دستور هر سال اول ژانویه، ساعت ۱۲ نیمه‌شب — شروع سال جدید
  • @reboot
    اجرای دستور فقط یک بار بلافاصله پس از راه‌اندازی مجدد سرور — مناسب برای تسک‌های یکباره هنگام بوت

۳. نمونه‌های کاربردی در سرورهای سنتی (VPS / Linux)

در سرورهای اوبونتو یا لینوکسی، با اجرای دستور crontab -e فایل زمان‌بندی باز می‌شود و می‌توانید دستورات زیر را در آن قرار دهید:

الف) انتشار خودکار پست‌های زمان‌بندی شده (Scheduled Posts)

برای اینکه سیستم هر ۵ دقیقه یک‌بار با ابزار curl اندپوینت وبلاگ شما را صدا بزند و پست‌های رزرو شده را منتشر کند:

*/5 * * * * curl -X POST https://sample.ir/api/cron/publish-posts
ب) بکاپ‌گیری شبانه از دیتابیس (PostgreSQL)

برای پشتیبان‌گیری خودکار از دیتابیس با ابزار pg_dump در ساعت ۲:۳۰ بامداد هر روز:

30 2 * * * pg_dump -U admin -h localhost blog_db > /backups/blog_backup_$(date +%F).sql

۴. کِرون‌جاب در محیط‌های ابری مدرن (Serverless Cron)

در پروژه‌های مدرن Next.js که روی پلتفرم‌های ابری (Serverless) مستقر می‌شوند، سرور ثابتی برای اجرای دستورات لینوکسی وجود ندارد. در این معماری، پلتفرم‌ها به صورت نیتیو آدرس‌های URL مشخصی از پروژه شما را در زمان‌های تعیین شده صدا می‌زنند.

۱. پلتفرم Vercel (انتخاب استاندارد Next.js)

برای تنظیم کِرون‌جاب در ورسل، کافیست فایلی به نام vercel.json را در ریشه (Root) پروژه خود ایجاد کنید. ورسل به صورت خودکار این فایل را می‌خواند و اندپوینت شما را صدا می‌زند:

{
  "crons": [
    {
      "path": "/api/cron/publish-posts",
      "schedule": "0 * * * *"
    }
  ]
}

در این کانفیگ، ورسل سر هر ساعت (0 * * * *) یک درخواست GET به مسیر /api/cron/publish-posts ارسال می‌کند.

۲. پلتفرم Render

پلتفرم Render ساختار متفاوتی دارد. به جای فایل کانفیگ، شما در پنل کاربری خود یک سرویس جدید از نوع Cron Job ایجاد می‌کنید. در تنظیمات آن، دستور اجرای اسکریپت بک‌اند خود را وارد می‌کنید:

node scripts/clear-cache.js

سپس در فیلد زمان‌بندی پنل، مقدار کِرون را روی گزینه‌هایی مثل @daily یا ستاره‌های مرسوم تنظیم می‌کنید تا اسکریپت مستقل از وب‌سایت اصلی اجرا شود.

۳. پلتفرم Railway

در پلتفرم Railway، مدیریت کِرون‌جاب‌ها معمولاً از طریق کانتینرهای داکر یا متغیرهای محیطی انجام می‌شود. با افزودن ویژگی زمان‌بندی به تگ سرویس یا استفاده از پکیج‌هایی مانند cron در اِندپوینت‌های Node.js، ریلوِی تضمین می‌کند که کانتینر شما برای انجام کارهای دوره‌ای (مثل دستور npm run db:migrate) همیشه بیدار بماند.

۴. سرویس GitHub Actions (راه‌حل رایگان و همه‌فن‌حریف)

اگر کدهای خود را روی گیت‌هاب میزبانی می‌کنید، می‌توانید از ابزار CI/CD گیت‌هاب به عنوان یک کِرون‌جاب کاملاً رایگان استفاده کنید. کافیست یک فایل در مسیر .github/workflows/cron-job.yml بسازید:

name: System Weekly Cleanup

on:
  schedule:
    - cron: '0 0 * * 0' # هر یکشنبه نیمه شب

jobs:
  cron_trigger:
    runs-on: ubuntu-latest
    steps:
      - name: Call API Endpoint
        run: curl -X POST https://sample.ir/api/cronjob/todo-cleanup

با این کار، خودِ گیت‌هاب سر هر هفته یک سیستم اوبونتو بالا می‌آورد، دستور curl را اجرا کرده و اِندپوینت وب‌سایت شما را فعال می‌کند.