آموزش کامل کرون جاب و Crontab؛ از لینوکس و cPanel تا Next.js

تاریخ بروزرسانی:۲۳ تیر ۱۴۰۵

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

در توسعه وب مدرن، اتوماسیون وظایف نقشی کلیدی در مدیریت سرورها، همگام سازی دیتابیس ها و به روزرسانی پلتفرم ها دارد. زمان بندی (Scheduling) در سیستم عامل های مبتنی بر لینوکس و یونیکس به شما اجازه می دهد وظایف مختلف (مثل اجرای اسکریپت های Node.js، درخواست های API در Next.js یا کوئری های دیتابیس) را در زمان های دقیقی که برایش تعریف می کنید، به صورت کاملا خودکار در پس زمینه اجرا کنید.

۱. تفاوت کلیدی Cronjob و Crontab

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

  • مفهوم Cronjob (کرون جاب): به خود «وظیفه» یا «تسک» زمان بندی شده گفته می شود. وقتی شما یک دستور را تنظیم می کنید تا هر شب ساعت ۱۲ اجرا شود، در واقع یک کرون جاب ساخته اید.
  • مفهوم Crontab (کرون تب - Cron Table): فایل متنی یا جدولی است که لیست تمام کرون جاب ها در آن ذخیره می شود. همچنین crontab نام دستوری در محیط ترمینال است که با آن این فایل را ویرایش، مشاهده یا مدیریت می کنید. سیستم عامل با خواندن کرون تب متوجه می شود چه وظیفه ای (کرون جاب) در چه زمانی باید اجرا گردد.

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

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

* * * * * 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)

۳. کاراکترهای ویژه در زمان بندی (Operators)

برای ایجاد زمان بندی های پیچیده تر، لینوکس چند کاراکتر ویژه در اختیار ما قرار می دهد که شناخت آن ها برای نوشتن اسکریپت های بهینه تر بسیار مهم است:

  • ستاره (*): یعنی «هر» واحد زمانی. مثلا ستاره در بخش ماه یعنی هر ماه.
  • کاما (,): برای لیست کردن مقادیر متعدد. مثلا 1,3,5 در بخش روزهای هفته یعنی دوشنبه، چهارشنبه و جمعه.
  • خط تیره (-): برای تعیین محدوده (Range). مثلا 9-17 در بخش ساعت یعنی هر ساعت از ۹ صبح تا ۵ عصر.
  • اسلش (/): برای تعیین گام یا فواصل زمانی (Steps). مثلا */15 در بخش دقیقه یعنی هر ۱۵ دقیقه یک بار.

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

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

@hourly 0 * * * *

اجرای دستور سر هر ساعت — دقیقا زمانی که دقیقه به صفر می رسد.

@daily 0 0 * * *

اجرای دستور هر روز نیمه شب — مناسب برای تولید گزارش ها یا آپدیت سورس کدهای گیتهاب.

@weekly 0 0 * * 0

اجرای دستور هر یکشنبه نیمه شب — ایده آل برای تسک های پاک سازی هفتگی دیتابیس.

@reboot —

اجرای دستور فقط یک بار پس از بوت سیستم — کاربردی برای راه اندازی مجدد سرویس های Node.js.

۵. مدیریت وظایف در سرورهای لینوکس و کنترل پنل ها

نحوه تعریف این زمان بندی ها بسته به محیط هاستینگ شما متفاوت است.

الف) سرورهای خام لینوکسی (VPS)

در سرورهای اوبونتو یا لینوکسی، مدیریت این تسک ها از طریق ابزار ترمینال انجام می شود:

  • crontab -e: باز کردن فایل زمان بندی برای ویرایش.
  • crontab -l: مشاهده لیست تمام وظایف فعال.
  • crontab -r: حذف کامل تمام وظایف کاربر فعلی.
نمونه: بکاپ گیری شبانه از دیتابیس (PostgreSQL)

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

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

ب) پنل های هاستینگ اشتراکی (cPanel)

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

  • وارد داشبورد cPanel شوید.
  • در بخش Advanced روی گزینه Cron Jobs کلیک کنید.
  • آدرس ایمیل خود را برای دریافت خروجی یا ارورها تنظیم کنید.
  • از منوی کشویی زمان مورد نظر (مثلا Twice a day) را انتخاب کنید یا ستاره ها را دستی وارد کنید.
  • در فیلد Command دستور خود را بنویسید (مثلا یک دستور curl یا مسیر مفسر PHP/Node).
نمونه: اجرای یک فایل PHP یا اندپوینت در هاست اشتراکی
*/5 * * * * /usr/local/bin/php /home/username/public_html/cron.php
# OR triggering an external webhook
0 * * * * /usr/bin/curl -s -X GET https://apidevelopers.ir/api/sync > /dev/null 2>&1

۶. کرون جاب در محیط های ابری مدرن و سرویس های رایگان (Serverless)

در معماری های Serverless و فریم ورک هایی مانند Next.js، سرور همیشه روشنی وجود ندارد. در اینجا، پلتفرم ها به صورت نیتیو یک آدرس URL یا وب هوک شما را در زمان های تعیین شده صدا می زنند.

۱. پلتفرم Vercel (محیط استاندارد Next.js)

در ورسل نیازی به تنظیمات سروری نیست. یک فایل vercel.json در ریشه پروژه خود ایجاد کنید:

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

۲. پلتفرم Render

در پلتفرم رندر، شما از پنل کاربری یک سرویس جدید از نوع Cron Job می سازید و دستور اجرای اسکریپت خود را به صورت مستقیم وارد می کنید:

node scripts/clear-cache.js

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

یکی از بهترین روش های رایگان برای تریگر کردن API های شما استفاده از ابزار CI/CD گیتهاب است. فایلی در مسیر .github/workflows/cron-job.yml بسازید:

name: System Weekly API Sync

on:
  schedule:
    - cron: '0 0 * * 0'

jobs:
  cron_trigger:
    runs-on: ubuntu-latest
    steps:
      - name: Call Next.js API Endpoint
        run: curl -X POST https://apidevelopers.ir/api/cronjob/db-sync -H "Authorization: Bearer ${{ secrets.CRON_SECRET }}"

۴. استفاده از Cron-job.org (کاملا رایگان)

اگر هاستینگ شما از کرون پشتیبانی نمی کند، وب سایت cron-job.org یک سرویس قدرتمند و رایگان است. کافیست ثبت نام کنید، URL روت API پلتفرم خود را وارد کنید، هدرهای لازم را تنظیم کنید و مشخص کنید در چه فواصل زمانی این آدرس فراخوانی شود.

۷. امنیت و مدیریت خطا در Cron Webhooks

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

الف) احراز هویت با Bearer Token در Next.js

همیشه یک توکن یا کلمه عبور مخفی را در هدر ریکوئست تنظیم کنید و در بک اند آن را بررسی نمایید:

export async function POST(request: Request) {
  const authHeader = request.headers.get('authorization');
  if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
    return new Response('Unauthorized Request', { status: 401 });
  }
  
  return new Response('Task Completed Successfully', { status: 200 });
}

ب) لاگ گیری و هدایت خطاها (Error Redirection) در سرور سنتی

در لینوکس، اگر اسکریپت با خطا مواجه شود در پس زمینه گم می شود. با اضافه کردن 2>&1 هر دو نوع خروجی و خطا را درون یک فایل ذخیره کنید:

0 0 * * * node /var/www/apidevelopers/sync.js >> /var/log/cron_sync_errors.log 2>&1
app-logo
وب سرویس

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


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

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

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

  • خانه
  • سرویس ها
  • ورود به حساب کاربری
  • خانه
  • سرویس ها
  • ورود به حساب کاربری
API Developers
API Developers Logo