آموزش کامل کرون جاب و Crontab؛ از لینوکس و cPanel تا Next.js
راهنمای جامع زمان بندی وظایف: از سرورهای لینوکسی تا پلتفرم های ابری
در توسعه وب مدرن، اتوماسیون وظایف نقشی کلیدی در مدیریت سرورها، همگام سازی دیتابیس ها و به روزرسانی پلتفرم ها دارد. زمان بندی (Scheduling) در سیستم عامل های مبتنی بر لینوکس و یونیکس به شما اجازه می دهد وظایف مختلف (مثل اجرای اسکریپت های Node.js، درخواست های API در Next.js یا کوئری های دیتابیس) را در زمان های دقیقی که برایش تعریف می کنید، به صورت کاملا خودکار در پس زمینه اجرا کنید.
۱. تفاوت کلیدی Cronjob و Crontab
بسیاری از توسعه دهندگان این دو اصطلاح را به جای هم استفاده می کنند، اما در معماری سرور تفاوت معنایی و عملکردی مشخصی دارند:
- مفهوم Cronjob (کرون جاب): به خود «وظیفه» یا «تسک» زمان بندی شده گفته می شود. وقتی شما یک دستور را تنظیم می کنید تا هر شب ساعت ۱۲ اجرا شود، در واقع یک کرون جاب ساخته اید.
-
مفهوم Crontab (کرون تب - Cron Table):
فایل متنی یا جدولی است که لیست تمام کرون جاب ها در آن ذخیره می شود. همچنین
crontabنام دستوری در محیط ترمینال است که با آن این فایل را ویرایش، مشاهده یا مدیریت می کنید. سیستم عامل با خواندن کرون تب متوجه می شود چه وظیفه ای (کرون جاب) در چه زمانی باید اجرا گردد.
۲. ساختار و آناتومی اصلی Cron
یک دستور زمان بندی از ۵ ستاره تشکیل شده است که هر کدام با یک فاصله از هم جدا شده اند و نماینده یک واحد زمانی مشخص هستند. ترکیب این ستاره ها زمان دقیق اجرای دستورات را مشخص می کند:
۳. کاراکترهای ویژه در زمان بندی (Operators)
برای ایجاد زمان بندی های پیچیده تر، لینوکس چند کاراکتر ویژه در اختیار ما قرار می دهد که شناخت آن ها برای نوشتن اسکریپت های بهینه تر بسیار مهم است:
- ستاره (*): یعنی «هر» واحد زمانی. مثلا ستاره در بخش ماه یعنی هر ماه.
- کاما (,): برای لیست کردن مقادیر متعدد. مثلا
1,3,5در بخش روزهای هفته یعنی دوشنبه، چهارشنبه و جمعه. - خط تیره (-): برای تعیین محدوده (Range). مثلا
9-17در بخش ساعت یعنی هر ساعت از ۹ صبح تا ۵ عصر. - اسلش (/): برای تعیین گام یا فواصل زمانی (Steps). مثلا
*/15در بخش دقیقه یعنی هر ۱۵ دقیقه یک بار.
۴. میان برهای ساده و آماده (Shortcuts)
به جای درگیری با اعداد و ساختارهای پیچیده، می توانید از کلمات کلیدی استاندارد زیر برای زمان بندی های روتین استفاده کنید:
اجرای دستور سر هر ساعت — دقیقا زمانی که دقیقه به صفر می رسد.
اجرای دستور هر روز نیمه شب — مناسب برای تولید گزارش ها یا آپدیت سورس کدهای گیتهاب.
اجرای دستور هر یکشنبه نیمه شب — ایده آل برای تسک های پاک سازی هفتگی دیتابیس.
اجرای دستور فقط یک بار پس از بوت سیستم — کاربردی برای راه اندازی مجدد سرویس های Node.js.
۵. مدیریت وظایف در سرورهای لینوکس و کنترل پنل ها
نحوه تعریف این زمان بندی ها بسته به محیط هاستینگ شما متفاوت است.
الف) سرورهای خام لینوکسی (VPS)
در سرورهای اوبونتو یا لینوکسی، مدیریت این تسک ها از طریق ابزار ترمینال انجام می شود:
crontab -e: باز کردن فایل زمان بندی برای ویرایش.crontab -l: مشاهده لیست تمام وظایف فعال.crontab -r: حذف کامل تمام وظایف کاربر فعلی.
نمونه: بکاپ گیری شبانه از دیتابیس (PostgreSQL)
برای پشتیبان گیری خودکار از دیتابیس با ابزار pg_dump در ساعت ۲:۳۰ بامداد هر روز و ذخیره آن با تاریخ همان روز در سرور اختصاصی:
ب) پنل های هاستینگ اشتراکی (cPanel)
در هاست های مبتنی بر سی پنل نیازی به محیط ترمینال نیست. شما می توانید از رابط کاربری استفاده کنید:
- وارد داشبورد cPanel شوید.
- در بخش Advanced روی گزینه Cron Jobs کلیک کنید.
- آدرس ایمیل خود را برای دریافت خروجی یا ارورها تنظیم کنید.
- از منوی کشویی زمان مورد نظر (مثلا Twice a day) را انتخاب کنید یا ستاره ها را دستی وارد کنید.
- در فیلد Command دستور خود را بنویسید (مثلا یک دستور
curlیا مسیر مفسر PHP/Node).
نمونه: اجرای یک فایل PHP یا اندپوینت در هاست اشتراکی
۶. کرون جاب در محیط های ابری مدرن و سرویس های رایگان (Serverless)
در معماری های Serverless و فریم ورک هایی مانند Next.js، سرور همیشه روشنی وجود ندارد. در اینجا، پلتفرم ها به صورت نیتیو یک آدرس URL یا وب هوک شما را در زمان های تعیین شده صدا می زنند.
۱. پلتفرم Vercel (محیط استاندارد Next.js)
در ورسل نیازی به تنظیمات سروری نیست. یک فایل vercel.json در ریشه پروژه خود ایجاد کنید:
۲. پلتفرم Render
در پلتفرم رندر، شما از پنل کاربری یک سرویس جدید از نوع Cron Job می سازید و دستور اجرای اسکریپت خود را به صورت مستقیم وارد می کنید:
۳. سرویس GitHub Actions (همه فن حریف و رایگان)
یکی از بهترین روش های رایگان برای تریگر کردن API های شما استفاده از ابزار CI/CD گیتهاب است. فایلی در مسیر .github/workflows/cron-job.yml بسازید:
۴. استفاده از Cron-job.org (کاملا رایگان)
اگر هاستینگ شما از کرون پشتیبانی نمی کند، وب سایت cron-job.org یک سرویس قدرتمند و رایگان است. کافیست ثبت نام کنید، URL روت API پلتفرم خود را وارد کنید، هدرهای لازم را تنظیم کنید و مشخص کنید در چه فواصل زمانی این آدرس فراخوانی شود.
۷. امنیت و مدیریت خطا در Cron Webhooks
وقتی در معماری ابری کار می کنید، آدرس API شما در دسترس عموم است. برای جلوگیری از اجرای دستی و سواستفاده از منابع، رعایت امنیت الزامی است.
الف) احراز هویت با Bearer Token در Next.js
همیشه یک توکن یا کلمه عبور مخفی را در هدر ریکوئست تنظیم کنید و در بک اند آن را بررسی نمایید:
ب) لاگ گیری و هدایت خطاها (Error Redirection) در سرور سنتی
در لینوکس، اگر اسکریپت با خطا مواجه شود در پس زمینه گم می شود. با اضافه کردن 2>&1 هر دو نوع خروجی و خطا را درون یک فایل ذخیره کنید: