در بسیاری از سیستمهای کامپیوتری و سرورها، لازم است برخی وظایف بهصورت خودکار و در زمانهای مشخص اجرا شوند. برای مثال ممکن است بخواهید هر شب از دیتابیس سایت خود نسخه پشتیبان تهیه کنید، هر چند دقیقه یک اسکریپت بررسی وضعیت سرور اجرا شود یا یک ایمیل گزارش روزانه برای مدیر سیستم ارسال گردد. انجام دستی این کارها هم زمانبر است و هم احتمال فراموش شدن آنها وجود دارد. اینجا است کهCron Job یا همان کرون جاب وارد عمل میشود. کرون جاب ابزاری در سیستمعاملهای مبتنی بر لینوکس و یونیکس است که امکان اجرای خودکار دستورات و اسکریپتها در زمانهای مشخص را فراهم میکند.
در این مقاله بهصورت کامل بررسی میشود که کرون جاب چیست، چگونه کار میکند، چه کاربردهایی دارد و انواع کرون جاب کدامند.
تعریف کرون جاب
کرون جاب (Cron Job) مکانیزمی در سیستمعاملهای لینوکسی است که اجازه میدهد یک دستور، برنامه یا اسکریپت در زمانبندی مشخص بهطور خودکار اجرا شود. در واقع Cron Job از دو بخش اصلی تشکیل شده است که عبارتند از:
- :Cron سرویس یا فرآیندی در لینوکس که زمانبندی وظایف را مدیریت میکند
- :Job دستوری که باید اجرا شود
بنابراین Cron Job یعنی، اجرای یک دستور مشخص در یک زمان مشخص بهصورت خودکار، برای مثال از کاربرد آن می توان موارد زیر را نام برد:
- اجرای یک اسکریپت پشتیبانگیری هر شب ساعت ۲
- پاک کردن فایلهای موقت هر هفته
- ارسال گزارش سرور هر روز
بنابراین تمام این موارد با استفاده از کرون جاب قابل انجام هستند.

تصویر(1)
نحوه کار یک Cron
در سیستمعامل لینوکس، سرویس Cron بهصورت مداوم در پسزمینه سیستم اجرا میشود. این سرویس فایلهای زمانبندی شده را بررسی میکند و در صورتی که زمان اجرای یک دستور فرا برسد، آن دستور را اجرا میکند.
بهطور خلاصه روند کار Cron به شکل زیر است:
- مدیر سیستم یا کاربر یک وظیفه زمانبندی شده تعریف میکند
- Cron این وظیفه را در فایلهای تنظیمات خود ذخیره میکند
- سرویس Cron در بازههای زمانی کوتاه این فایلها را بررسی میکند
- زمانی که زمان اجرای یک دستور فرا برسد، آن دستور اجرا میشود
به این ترتیب بدون نیاز به دخالت کاربر، کارها در زمان مشخص انجام میشوند.
آشنایی با ساختار یک کرون جاب
قالب ساختار یک کرون جاب به شکل زیر می باشد:

تصویر(2)
در ساختار بالا هر یک از علامتهای ستاره یا * در این الگو نماینده یک بازه زمانی مشخص می باشند ، که این بازه های زمانی عبارتند از دقیقه، ساعت، روز ماه، ماه و روز هفته، سپس بعد از این بخشها نیز دستوری قرار میگیرد که باید در زمان تعیینشده اجرا شود. پس بهطور کلی همان طور که در تصویر بالا مشاهده می کنید ساختار دستورات در کرون جاب از 6 بخش اصلی تشکیل شده است که به ترتیب مطابق تصویر از چپ به راست به صورت زیر تعریف میشوند:
- دقیقه
- ساعت
- روز
- ماه
- روزهفته
- دستوری که باید اجرا شود
این ساختار مشخص میکند یک دستور دقیقاً در چه زمانی اجرا شود گرچه در نگاه اول ممکن است نحوه نوشتن این زمانبندی کمی گیجکننده به نظر برسد، اما وقتی اجزای آن را بهصورت جداگانه بررسی کنید، متوجه میشوید که منطق ساده و مشخصی دارد.
نحوه استفاده از کرون جاب
در این بخش دو روش جهت استفاده از کرون جاب تشریح می شود که عبارتند از:
- استفاده از خط فرمان لینوکس
- تنظیم کرون جاب در هاست اشتراکی
استفاده از خط فرمان لینوکس
اگر با محیط لینوکس و کار با خط فرمان آشنا باشید، تعریف و مدیریت کرون جاب نیز برای شما کار دشواری نخواهد بود. ابزار اصلی برای تنظیم کرون جاب در لینوکس برنامهای به نام crontab است. برای ایجاد یا ویرایش وظایف زمانبندیشده بعد از دسترسی به ترمینال لینوکس خود میتوانید مراحل زیر را دنبال کنید:
Crontab -e
-
بازکردن فایل مربوط به زمان بندی کرون
ابتدا باید فایل زمان بندی کرون را بازکنید ، برای این کار دستور زیر را در ترمینال لینوکس خود اجرا کنید. گزینه -e مخفف کلمه edit است و فایل تنظیمات کرون جاب را برای ویرایش باز میکند.
-
انتخاب ویرایشگر متن (تنهادر دفعه اول اجرای دستور corntab)
اگر برای اولین بار دستور ذکر شده در مرحله قبل را اجرا کنید، ممکن است از شما خواسته شود یک ویرایشگر متن انتخاب کنید. برای کاربران مبتدی

تصویر(3)
معمولاً nano گزینه مناسبی است، زیرا کار با آن سادهتر است.
- افزودن کرون جاب جدید
پس از باز شدن فایل crontab میتوانید وظیفه زمانبندی شده خود را اضافه کنید. توجه داشته باشید:
- هر کرون جاب باید در یک خط جداگانه نوشته شود.
- ابتدا زمانبندی و سپس دستور موردنظر نوشته میشود.
برای مثال اگر بخواهید اسکریپتی با نامmyscript.sh که در پوشه home قرار دارد هر روز ساعت ۳:۳۰ بامداد اجرا شود، مطابق تصویر ضمیمه شده اقدام کنید:

تصویر(4)
در نظر داشته باشید که به جای username باید نام کاربری واقعی سیستم خود را وارد کنید. همچنین بهتر است همیشه مسیر کامل اسکریپت (Absolute Path) را بنویسید، زیرا سرویس cron معمولاً به متغیرهای محیطی سیستم دسترسی ندارد و اگر مسیر کامل مشخص نباشد ممکن است نتواند فایل موردنظر را پیدا کند.
ذخیر تنظیمات کرون
پس از اضافه کردن کرون جابها باید فایل را ذخیره کرده و از ویرایشگر خارج شوید .اگر از nano استفاده میکنید مراحل ذخیره به شکل زیر است:
- فشردن کلیدهای Ctrl + X
- فشار دادن Y برای تأیید ذخیره تغییرات
- زدنEnter برای ثبت نهایی فایل
پس از ذخیره فایل، سرویسcron بهصورت خودکار تنظیمات جدید را بارگذاری میکند و از آن لحظه کرون جابها طبق زمانبندی تعریفشده اجرا خواهند شد.
تنظیم کرون جاب در کنترل پنل هاست
در محیطهای هاستینگ در حین استفاده از کنترل پنل هایی مانندCPanel نیز امکان ایجاد Cron Job وجود دارد. بسیاری از مدیران سایت از این قابلیت برای اجرای اسکریپتهای وب استفاده میکنند.
برخی کاربردهای کرون جاب در هاست عبارتند از:
- ارسال ایمیلهای زمانبندی شده
- اجرای اسکریپتهای PHP
- بروزرسانی اطلاعات سایت
- تهیه نسخه پشتیبان
در سرویس های هاست اشتراکی میهن وب هاست این امکان برای شما قرار داده شده است، جهت تعریف و استفاده از این قابلیت می توانید از آموزش های زیر استفاده نمایید:
آموزش ایجاد کرون جاب در کنترل پنل سی پنل
آموزش ایجاد کرون جاب در کنترل پنل دایرکت ادمین
مهم ترین کاربردهای کرون جاب
تا اینجا با مفهوم کرون جاب و نحوه کار آن آشنا شدید و احتمالاً متوجه شدهاید که این ابزار نقش مهمی در اجرای خودکار وظایف در سرورها و سیستمهای آنلاین دارد. در ادامه، چند نمونه از کاربردهای رایج Cron Job عنوان خواهد شد تا مشاهده شود که در عمل از این قابلیت برای انجام چه کارهایی استفاده میشود.
-
بکاپ گیری خودکار از سایت
تهیه نسخه پشتیبان یکی از ضروریترین کارها برای هر وبسایت یا سرور است. اگر این کار بهصورت دستی انجام شود ممکن است به مرور زمان فراموش شود یا با تأخیر انجام گیرد. با استفاده از Cron Job میتوان فرآیند بکاپگیری را بهطور کامل خودکار کرد تا در بازههای زمانی مشخص، از فایلها و پایگاه داده نسخه پشتیبان تهیه شود.
-
ارسال خودکار ایمیل
اگر در وبسایت خود خبرنامه ایمیلی دارید یا قصد دارید بعد از رخداد خاصی برای کاربران ایمیل ارسال کنید، میتوانید با استفاده از Cron Job این فرآیند را بهصورت خودکار انجام دهید. با این روش دیگر نیازی نیست ارسال ایمیلها بهصورت دستی انجام شود و همه چیز طبق یک زمانبندی مشخص اجرا خواهد شد.
-
پاک کردن سیستم کش سایت
در بسیاری از وبسایتها برای افزایش سرعت بارگذاری صفحات از سیستم کش استفاده میشود. با این حال، فایلهای کش اگر برای مدت طولانی بدون مدیریت باقی بمانند، ممکن است قدیمی شوند یا فضای زیادی از سرور را اشغال کنند. در چنین شرایطی میتوان با کمک Cron Job فرآیند پاکسازی کش را بهصورت خودکار انجام داد تا هم محتوای بهروزتری به کاربران نمایش داده شود و هم فضای ذخیرهسازی سرور بهتر مدیریت شود.

تصویر(5)
-
به روز رسانی سایت مپ
نقشه سایت یاSitemap یکی از عناصر مهم در بهینهسازی سایت برای موتورهای جستوجو است؛ زیرا به خزندههای موتورهای جستوجو کمک میکند ساختار صفحات سایت را بهتر شناسایی کرده و آنها را سریعتر ایندکس کنند. در وبسایتهایی که مرتباً محتواهای جدید منتشر میکنند، بهتر است فایل سایتمپ بهصورت منظم بهروزرسانی شود. برای انجام این کار میتوان از Cron Job استفاده کرد تا فرآیند ایجاد یا بروزرسانی سایتمپ بهطور خودکار در زمانهای مشخص اجرا شود.
-
زمان بندی کارها در سایت های وردپرسی
در سیستم مدیریت محتوای وردپرس، بسیاری از فعالیتها بهصورت زمانبندی شده انجام میشوند. برای مثال کارهایی مانند ارسال ایمیلهای سیستم، انتشار نوشتههای زمانبندیشده، بررسی بهروزرسانیها، اجرای برخی افزونهها و پاکسازی دادههای موقت همگی در زمانهای مشخص اجرا میشوند. وردپرس بهطور پیشفرض برای مدیریت این وظایف از سیستمی به نام WP-Cron استفاده میکند.
اما نکته مهم اینجاست که WP-Cron در واقع یک کرون واقعی در سطح سیستمعامل نیست. اجرای آن به بازدید کاربران از سایت وابسته است. به این معنا که زمانی که کاربری وارد سایت میشود، وردپرس بررسی میکند آیا وظیفه زمانبندیشدهای برای اجرا وجود دارد یا خیر .این موضوع چند مشکل ایجاد میکند:
- در سایتهایی با ترافیک کم ممکن است برخی وظایف با تأخیر اجرا شوند یا حتی اصلاً اجرا نشوند.
- در سایتهای پربازدید ممکن است این فرآیند بیش از حد تکرار شود و باعث مصرف اضافی منابع سرور گردد.
- به همین دلیل در بسیاری از سرورها استفاده از WP-Cron بهتنهایی گزینه ایدهآلی محسوب نمیشود.
راهکار بهتر این است که WP-Cron غیرفعال شده و اجرای آن به یک Cron Job واقعی در سرور لینوکسی سپرده شود .در این روش زمانبندی وظایف بهطور دقیق انجام میشود، اجرای آنها وابسته به بازدید کاربران نیست و مدیریت منابع سرور نیز بهتر انجام میگیرد. اگر با مشکل مصرف بالای wp-cron در سایت وردپرسی خود نیز مواجه هستید می توانید اموزش زیرا مطالعه بفرمایید:
نحوه غیر فعال کردن wp-corn در وردپرس
-
مانیتورینگ وضعیت سیستم
با استفاده از Cron Job میتوان وضعیت بخشهای مختلف سرور مانند میزان مصرف منابع، سرویسهای مهم و حتی فایلهای حیاتی را در بازههای زمانی مشخص بررسی کرد. در صورت بروز خطا یا افزایش غیرعادی مصرف منابع نیز میتوان هشدار دریافت کرد. این کار کمک میکند مشکلات احتمالی قبل از آنکه باعث اختلال در عملکرد سایت یا سرویس شوند، شناسایی و برطرف گردند.
-
خودکارسازی وظایف در مدیریت سرور
بخش زیادی از کارهایی که مدیران سرور بهصورت روزانه یا هفتگی انجام میدهند، معمولاً فعالیتهایی تکراری و قابل زمانبندی هستند. با استفاده از Cron Job میتوان این وظایف را به شکل خودکار اجرا کرد تا نیازی به انجام دستی آنها نباشد. این کار علاوه بر صرفهجویی در زمان، احتمال بروز خطاهای انسانی را کاهش میدهد و مدیریت سرور را نیز منظمتر و ایمنتر میکند.
- برخی از وظایف مدیریتی که میتوان آنها را با کمک کرون جاب بهصورت خودکار انجام داد عبارتند از:
- راهاندازی مجدد سرویسها مانند Apache، Nginx یا Redis
- حذف فایلها و لاگهای قدیمی برای آزادسازی فضای دیسک
- بروزرسانی خودکار سیستمعامل و بستههای نرمافزاری
- بررسی و ثبت گزارش مصرف منابع سرور

تصویر(6)
مشکلات کرون جاب
-
همزمانی در اجرا
گاهی ممکن است یک Cron Job هنوز در حال اجرا باشد، اما زمان اجرای بعدی آن فرا برسد. در چنین شرایطی اجرای جدید قبل از پایان اجرای قبلی آغاز میشود و در نتیجه چند نسخه از همان اسکریپت بهطور همزمان اجرا خواهند شد. این وضعیت که به آن همپوشانی اجرای کرون جاب گفته میشود میتواند فشار زیادی به منابع سرور وارد کند.
برای مثال اگر اجرای یک اسکریپت حدود ۱۰ دقیقه زمان ببرد، اما در کرون جاب طوری تنظیم شده باشد که هر ۵ دقیقه اجرا شود، بهمرور چند فرآیند از همان اسکریپت همزمان فعال خواهند شد. راه حل این است که برای جلوگیری از چنین مشکلی میتوان از مکانیزمی به نام Lock استفاده کرد. با این روش اگر اسکریپت در حال اجرا باشد، اجرای بعدی تا پایان فرآیند قبلی انجام نخواهد شد.
*/5 * * * * flock -n /tmp/script.lock /path/script.sh
یکی از روشهای متداول استفاده از دستورflock است. در این حالت یک فایل قفل ایجاد میشود و تا زمانی که اسکریپت قبلی در حال اجرا باشد، اجرای مجدد آن متوقف خواهد شد. این روش کمک میکند از اجرای همزمان اسکریپتها و مصرف بیش از حد منابع سرور جلوگیری شود.
- خطا در ساختار زمان بندی
با توجه به اینکه در ساختار کرون جاب از 5 پارامتر برای تعیین زمان بندی استفاده می شود ممکن است که در ترتیب نوشتن آن زمان ها اشتباهی رخ دهد.
0*/5 * * * /path/script.sh >> /home/user/cron.log 2>&1
- ایجاد نکردن لاگ از خطاها
بهتر است برای هر کرون جابی که ساخته می شود یک فایل لاگ در نظر گرفته شود تا در صورت خطا در اجرای اسکریپت اجرا شده لاگ آن خطا در فایل مذکور ثبت شود تا بتوان فرایند troubleshoot را در سریعترین زمان ممکن و راحت تر انجام داد.
- خطا در تعیین مسیر
مسیر دهی باید به صورت کامل و صحیح انجام شود.استفاده از مسیرهای نسبی (Relative Path) در کرون جابها میتواند باعث بروز خطا شود. دلیل این موضوع این است که کرون جابها در محیطی جدا از ترمینال یا شل کاربر اجرا میشوند و معمولاً از مسیر فعلی سیستم (Current Directory) اطلاعی ندارند. در نتیجه اگر مسیر کامل فایل یا دستور مشخص نشده باشد، سرویس Cron ممکن است نتواند فایل موردنظر را پیدا کند و دستور اجرا نشود. به همین دلیل در تعریف کرون جاب بهتر است همیشه از مسیر کامل یا Absolute Path استفاده کنید.
- مشکل مجوز اجرا در کرون جاب
در سیستمعاملهای مبتنی بر لینوکس، برای هر فایل سه نوع سطح دسترسی در نظر گرفته میشود:
- خواندن (Read)
- نوشتن (Write)
- اجرا (Execute)
این مجوزها مشخص میکنند که کاربران سیستم چه عملیاتی میتوانند روی یک فایل انجام دهند.اگر اسکریپتی که قرار است توسط کرون جاب اجرا شود، مجوز اجرا (Execute) نداشته باشد، حتی در صورتی که مسیر فایل و زمانبندی آن کاملاً درست تنظیم شده باشد، کرون جاب قادر به اجرای آن نخواهد بود و دستور موردنظر اجرا نمیشود.
جمع بندی
Cron Job یکی از مهمترین ابزارهای زمانبندی وظایف در سیستمعاملهای لینوکسی است که امکان اجرای خودکار دستورات و اسکریپتها را در زمانهای مشخص فراهم میکند. با استفاده از این ابزار میتوان بسیاری از کارهای تکراری مانند پشتیبانگیری، مانیتورینگ سرور، ارسال گزارشها و اجرای اسکریپتهای مختلف را بهصورت خودکار انجام داد. آشنایی با انواع کرون جاب، نحوه تعریف زمانبندی و کاربردهای آن برای مدیران سیستم، برنامهنویسان و حتی مدیران وبسایتها بسیار ضروری است. با استفاده صحیح از Cron Job میتوان مدیریت سرور را سادهتر کرد و بسیاری از فرآیندهای مهم را بدون دخالت دستی اجرا نمود.